ActiveMQ以编程方式设置传输参数

dam*_*ina 2 java activemq-classic ultraesb

是否可以设置ActiveMQ传输参数,例如maxReconnectAttempts在运行时使用Java API?

在我的情况下,我最初通过提供基本故障转移URL故障转移来创建ActiveMQ连接工厂:

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

但是后来我需要将传输参数设置为此连接工厂,例如maxReconnectAttempts.可能吗?

Has*_*our 6

当然,就像这样:

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

可以在URL中设置所有故障转移传输选项

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);
Run Code Online (Sandbox Code Playgroud)

或更具可读性:

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

要理解为什么所有这些演员,你可以看看这个方法的源代码:

org.apache.activemq.transport.failover.FailoverTransportFactory.doConnect(URI)
Run Code Online (Sandbox Code Playgroud)

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