2017-01-03 3 views
2

Можно ли установить транспортные параметры ActiveMQ, такие как maxReconnectAttempts с использованием java API во время выполнения?ActiveMQ программно задает транспортные параметры

В моем случае я создании фабрики соединений ActiveMQ первоначально обеспечивая базовый отказоустойчивый URL-адрес восстановления после сбоя:

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