【问题标题】:How to check whether Active MQ is up in continuous intervals in mule esb?如何在 mule esb 中检查 Active MQ 是否连续运行?
【发布时间】:2015-12-29 02:48:14
【问题描述】:

我在一个队列中有消息并且需要发送到其他队列(目标)都是活动的 MQ。当目标关闭时,消息将在源队列中。我需要连续检查目的地是否已启动。如果它起来了,我需要发送到目的地。我在检查目的地可用性时遇到困难.., 请帮助我。,谢谢..,

【问题讨论】:

  • 有重新连接策略。你可以检查他们
  • 发送到其他队列是什么意思?它是从源读取,处理并发送到下一个队列吗?源和目标是否在同一台服务器上?
  • 谁会使用目标队列中的消息?为什么不让这个消费者从源队列中读取呢?

标签: jms mule activemq


【解决方案1】:

我认为一般来说,这种问题最好使用transactions来解决。

我假设您正在使用两个不同的 ActiveMQ 代理,这会导致目标队列不可用。

在最简单的情况下,您可以通过以下方式实现目标:

  1. 启动 JMS 事务
  2. 从代理 1 上的队列 A 接收消息
  3. 执行任何所需的逻辑和/或转换
  4. 将消息发布到代理 2 上的队列 B
  5. 如果成功,提交您的 JMS 事务
    • 如果没有,请回滚您的 JMS 事务

例子:

<flow name="simpleExample">
    <jms:inbound-endpoint queue="queueA" connector-ref="broker1">
        <jms:transaction action="ALWAYS_BEGIN"/>
    </jms:inbound-endpoint>
    <flow-ref name="doLogic" />
    <jms:outbound-endpoint queue="queueB" connector-ref="broker2">
        <jms:transaction action="ALWAYS_JOIN" />
    </jms:outbound-endpoint>
</flow>

当发生回滚时,该方法会立即重试。如果您想控制重试前的等待时间,请为代理 1 配置 redelivery policy on the ActiveMQ connector

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    相关资源
    最近更新 更多