斷線重連機制是ActiveMQ的高可用性具體體現之一。ActiveMQ提供failover機制去實現斷線重連的高可用性,可以使得連接斷開之后,不斷的重試連接到一個或多個brokerURL。
默認情況下,如果client與broker直接的connection斷開,則client會新起一個線程,不斷的從url參數中獲取一個url來重試連接。
配置語法
failover:(uri1,...,uriN)?transportOptions&nestedURIOptions
or
failover:uri1,...,uriN
例如:
failover:(tcp://localhost:61616,tcp://remotehost:61616)?initialReconnectDelay=100
具體配置參數參考:http://activemq.apache.org/failover-transport-reference.html
使用randomize
默認情況下,failover機制從URI列表中隨機選擇出一個URI進行連接,這可以有效地控制客戶端在多個broker上的負載均衡,但是,要使客戶端首先連接到主節點,並在主節點不可用時只連接到輔助備份代理,需要設置randomize = false。
failover:(tcp://master:61616,tcp://slave:61616)?randomize=false
在failover機制下傳輸,發送操作將默認在broker變得不可用時無限期阻塞。 有兩個選項可用於處理此方案。 首先,直接在ActiveMQConnectionFactory上設置一個TransportListener,以便在任何可能需要網絡跳躍的請求之前就位,或者設置超時選項。 超時選項會導致當前發送操作在指定的超時后失敗。
failover:(tcp://primary:61616)?timeout=3000
在此示例中,如果連接未建立,發送操作將在3秒后超時。 需要注意的是,當超時發生時連接不會被終止。 因此,一旦broker可用,以后可能使用相同的連接重新發送受影響的消息。
broker端的配置參數
例子:
<broker>
...
<transportConnectors>
<transportConnector name="openwire"
uri="tcp://0.0.0.0:61616"
updateClusterClients="true"
updateClusterFilter=".*A.*,.*B.*"/>
</<transportConnectors>
...
</broker>
當updateClusterClients=”true”時,client端的failover配置只需要寫成:
failover:(tcp://primary:61616)
當新的broker加入集群時,客戶端被自動通知新的broker的URI。 當其他已知broker之一不可用時,新的URI可用於故障轉移。
Priority Backup
ActiveMQ 5.6+開始,如果broker在本地和遠程網絡中都可用,則可以使用priorityBackup和priorityURIs選項為遠程broker指定本地broker的首選項。
failover:(tcp://local:61616,tcp://remote:61616)randomize=false&priorityBackup=true
以上配置例子,客戶端將嘗試連接並保持連接到本地broker。 如果本地broker失敗,它當然會故障轉移到遠程。 但是,由於使用priorityBackup參數,客戶端將不斷嘗試重新連接到本地。 一旦客戶端可以這樣做,客戶端將重新連接到它,而不需要任何手動干預。
默認情況下,只有列表中的第一個URI被視為優先級(本地)。 在大多數情況下,這就足夠了。 然而,在一些情況下,可能需要具有多個“本地”URI。 priorityURIs選項可用於指定哪些URI被視為優先級。
failover:(tcp://local1:61616,tcp://local2:61616,tcp://remote:61616)?randomize=false&priorityBackup=true&priorityURIs=tcp://local1:61616,tcp://local2:61616
---------------------
作者:ProHayley
來源:CSDN
原文:https://blog.csdn.net/zuolj/article/details/53167758
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!