是否可以在运行时使用java API设置ActiveMQ传输参数,例如maxReconnectAttempts
?
在我的情况下,我最初通过提供基本的故障转移URL故障转移来创建ActiveMQ连接工厂:
ActiveMQSslConnectionFactory connectionFactory = new ActiveMQSslConnectionFactory("(ssl://192.168.1.112:61617,ssl://192.168.1.112:61619)?randomize=false")
但是稍后我需要将传输参数设置为此连接工厂,例如maxReconnectAttempts
。有可能吗?
答案 0 :(得分:6)
ActiveMQSslConnectionFactory connectionFactory = new ActiveMQSslConnectionFactory("failover:(ssl://192.168.1.112:61617,ssl://192.168.1.112:61619)?randomize=false&maxReconnectAttempts=Value")
可以在网址
中设置所有故障转移传输选项http://activemq.apache.org/failover-transport-reference.html
如果您想稍后更改网址,可以调用connectionFactory.setBrokerURL("newURL")
,之后创建的所有新连接都将使用网址的新参数进行配置。
如果要在创建ConnectionFactory之后更改它,请记住,基于url参数为每个新Connection创建一个新的FailoverTransport实例,并且每个Connection都包含其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)