3

是否可以设置 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. 可能吗?

4

1 回答 1

6

当然,就像这样:

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 后更改它,请记住,会根据 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)

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

于 2017-01-03T08:51:47.310 回答