我需要在发送消息之前检查activemq代理的状态

时间:2017-08-21 17:52:52

标签: java activemq spring-jms

实际上我的用例是我需要处理经纪人不可用的情况。所以我需要在发送消息之前知道经纪人的状态?我尝试使用以下sendtimeout属性,但仍然没有成功。

<bean primary="true" id="jmsConnectionFactory"
    class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="failover:(tcp://localhost:61616)" />
    <property name="useAsyncSend" value="true" />
    <property name="watchTopicAdvisories" value="false" />
    <property name="sendTimeout" value="2000" />

</bean>

2 个答案:

答案 0 :(得分:0)

Connection conn = null;
try {
    conn = connectionFactory.createConnection();
    jmsTemplate.send(...);
} 
catch (Exception e) {
    ...
}
finally {
    if (conn != null) {
        conn.close();
    }
}

或者您可以在try / catch中进行发送。

此外,最好将ActiveMQConnectionFactory打包在CachingConnectionFactory中,以避免为每次发送打开连接。

答案 1 :(得分:0)

&#34;所以我需要在发送消息之前知道经纪人的状态&#34;

检查经纪人的状态肯定有不同的选项,但我想知道这是否真的需要? 如果您尝试在代理不可用时发送消息,则该发送应立即失败。我能想到生产者被阻止的唯一原因是生产者是否受到流量控制。但这也意味着代理可用并且可以配置流控制行为(例如,在配置的超时后抛出异常)。 因此,只需发送您的消息并捕获可能出现的任何异常即可。