带有 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 的客户端通信