带有 Active-MQ 的 Mule 发布/订阅模型。如何在 Active-MQ JMS 中的消息到达时以异步方式调用 tomcat-consumers

Posted

技术标签:

【中文标题】带有 Active-MQ 的 Mule 发布/订阅模型。如何在 Active-MQ JMS 中的消息到达时以异步方式调用 tomcat-consumers【英文标题】:Mule Publish/Subscribe model with Active-MQ. How to invoke tomcat-consumers in asynchronously manner upon arriving message in Active-MQ JMS 【发布时间】:2014-09-23 19:19:43 【问题描述】:

如何使用 Active-MQ 实现 JMS 发布/订阅模型。我有一个所有消息都来的入站 JMS Active-MQ 队列/主题。另一方面,我有几个出站消费者(Tomcat-Http)。我想以这样一种方式实现发布/订阅模型,一旦我在 Active-MQ 中收到一条消息,它就会以异步方式调用所有 tomcat 消费者。

有没有办法在 Mule 中实现上述模型?

【问题讨论】:

【参考方案1】:

为此使用流程:

<flow name="amq2http">
  <jms:inbound-endpoint queue="yourQueue" />
  <http:outbound-endpoint address="http://whatever.url" />
</flow>

当然,你需要配置ActiveMQ连接器:

<jms:activemq-connector name="jmsConnector" brokerURL="tcp://localhost:61616"/>

阅读以下链接了解更多信息:

http://www.mulesoft.org/documentation/display/current/ActiveMQ+Integration http://www.mulesoft.org/documentation/display/current/HTTP+Transport+Reference

【讨论】:

完美它工作正常。有什么方法可以在 Active-MQ 队列中保留消息?因为如果我的 http:outbound-endpoint(Tomcat) 出现故障/崩溃,则无法处理该请求。 是的,在这种情况下,您需要转换地使用消息,以便 HTTP 错误回滚传递,从而触发后续重新传递。在此处阅读有关可靠性模式的信息:mulesoft.org/documentation/display/current/Reliability+Patterns David,只要您想以同步方式实现,可靠性是一个很好的解决方案。如博客中所述,它仅支持同步流。 我想以异步方式解决我的问题。我想实现类似fire and forgot之类的东西。我想异步调用/触发 http-tomcat。我认为的解决方案之一是将消息存储在两个 JMS 队列中,一旦处理来自 queue-1 的消息,然后也从 queue-2 中删除。如果任何情况下应用程序崩溃,那么队列 2 中的消息仍然可用,我们可以对其进行处理。但是这种方法相当昂贵,效率也不高。如果有什么方法可以在消息被消费后将其保留在队列中,那么我们可以在它被处理后将其删除。有什么想法吗? 在这种情况下,使用 until-successful 元素包装 HTTP 端点。默认情况下它是异步的,将负责重试。这不会将消息留在队列中,而是 Mule 提供的执行您想要的操作的方式。

以上是关于带有 Active-MQ 的 Mule 发布/订阅模型。如何在 Active-MQ JMS 中的消息到达时以异步方式调用 tomcat-consumers的主要内容,如果未能解决你的问题,请参考以下文章

与 Mule/ActiveMQ 和 C++ Stomp 的客户端通信

使用 Mule 重新排队 JMS 请求

烧瓶-SocketIO + uWSGI。与 Mule 工人一起发射

我无法在独立服务器上部署域

如何在 Mule 4 中通过 ActiveMQ 传递属性

mule3 到 mule 4 表达式到 dataweave 2.0