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