【问题标题】:I need to check the status of the activemq broker before the messages sent我需要在发送消息之前检查 activemq 代理的状态
【发布时间】:2017-09-05 16:16:55
【问题描述】:

实际上我的用例是我需要处理代理不可用的情况。所以我需要在发送消息之前知道经纪人的状态?我尝试了下面的 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>

【问题讨论】:

    标签: java activemq spring-jms


    【解决方案1】:
    Connection conn = null;
    try {
        conn = connectionFactory.createConnection();
        jmsTemplate.send(...);
    } 
    catch (Exception e) {
        ...
    }
    finally {
        if (conn != null) {
            conn.close();
        }
    }
    

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

    另外,最好将ActiveMQConnectionFactory 包装在CachingConnectionFactory 中,以避免每次发送都打开一个连接。

    【讨论】:

    • 感谢 Gray,无论如何我正在使用 ProducerTemplate 发送消息,因为我正在使用带有 activemq 的 spring,如下所示。 ..................................................... ..................................................... ..................... ProducerTemplate tepm = camelContext.createProducerTemplate(); tepm.sendBody("direct:a", string);所以我不在java代码中调用连接。我使用了xml文件中的所有连接。
    • 您在最初的问题中没有提到骆驼 - 我无法帮助您。
    • 我正在使用 Camel 使用 ActiveMQ,所以我需要处理代理不可用的情况。我该怎么做?
    【解决方案2】:

    “所以我需要在发送消息之前知道经纪人的状态”

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-14
      • 2015-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多