2017-01-03 89 views
2

是否可以在運行時使用java API設置ActiveMQ傳輸參數(例如maxReconnectAttempts)?ActiveMQ以編程方式設置傳輸參數

在我的情況,我提供了一個基本的故障轉移URL故障最初創建的ActiveMQ連接工廠:

ActiveMQSslConnectionFactory connectionFactory = new ActiveMQSslConnectionFactory("(ssl://192.168.1.112:61617,ssl://192.168.1.112:61619)?randomize=false")

但是後來我將需要傳輸參數設置爲這個連接工廠如maxReconnectAttempts。可能嗎?

回答

5

肯定,只是這樣的:

ActiveMQSslConnectionFactory connectionFactory = new ActiveMQSslConnectionFactory("failover:(ssl://192.168.1.112:61617,ssl://192.168.1.112:61619)?randomize=false&maxReconnectAttempts=Value") 

所有故障轉移運輸選項可以在URL

http://activemq.apache.org/failover-transport-reference.html

如果以後要更改URL設置,你可以調用connectionFactory.setBrokerURL("newURL"),之後,所有創建的新連接都將使用url的新參數進行配置。

,如果你想改變這種創作的ConnectionFactory後,請記住,FailoverTransport的新實例是基於該URL參數每個新的連接創建每個連接捏着他FailoverTransport的一個實例,所以要改變他的狀態,你可以這樣訪問:

((FailoverTransport) ((TransportFilter) ((TransportFilter) ((ActiveMQConnection) connection).getTransport()).getNext()).getNext()) 
       .setMaxReconnectAttempts(10); 

或更具可讀性:

org.apache.activemq.transport.TransportFilter responseCorrelator = (TransportFilter) ((ActiveMQConnection) connection).getTransport(); 
TransportFilter mutexTransport = (TransportFilter) responseCorrelator.getNext(); 
FailoverTransport failoverTransport = (FailoverTransport) mutexTransport.getNext(); 
failoverTransport.setMaxReconnectAttempts(10); 

理解爲什麼所有這些類型轉換,你可以在這個方法的源代碼來看看:

org.apache.activemq.transport.failover.FailoverTransportFactory.doConnect(URI) 

這裏https://github.com/apache/activemq/blob/master/activemq-client/src/main/java/org/apache/activemq/transport/failover/FailoverTransportFactory.java