首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mule的jms:消费与jms:侦听器的区别

Mule的jms:消费与jms:侦听器的区别
EN

Stack Overflow用户
提问于 2022-06-30 04:03:16
回答 1查看 117关注 0票数 0

在前提条件下使用Mule 4.4和ActiveMQ。我正试图更好地理解Mule如何处理消息。

我试着搜索互联网,但没有找到任何关于同样的细节。

我有一个jms:listener

代码语言:javascript
复制
<jms:listener doc:name="Listener" config-ref="JMS_Config" destination="Consumer.mine2.VirtualTopic.mine.test">
    <jms:consumer-type >
        <jms:queue-consumer />
    </jms:consumer-type>
</jms:listener>

我有一个jms:consume

代码语言:javascript
复制
<jms:consume doc:name="Consume"  config-ref="JMS_Config" destination="Consumer.mine1.VirtualTopic.mine.test">
    <jms:consumer-type >
        <jms:queue-consumer />
    </jms:consumer-type>
</jms:consume>

在我看来,两者似乎都在做相同的工作,即使用来自队列/主题的消息。那么为什么我们在Mule中有这两个组件呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-30 05:39:41

jms listener是一个源,所以只要队列中有新消息,就可以使用它触发流。

jms consume是一种操作,因此您可以在流的执行过程中的任何地方使用它,例如您在流的中间放置的http request组件。

和它们都将使用来自队列/主题的消息。然而,当您使用listener时,您基本上是在说:“有一个队列,我不知道什么时候会出现新消息,但是每当消息出现时,我就需要执行这些操作。”

当您使用consume操作时,您是在说“我期待很快就会收到一些消息,并将对这些操作进行处理”。

现在,在这两种情况下,一个信息可能根本不会出现,两者都有自己的方法来处理它。一个listener,因为它是一个源,不只是简单地触发流并继续等待。consume会阻止您的执行,直到消息出现为止,或者您可以将超时时间配置为以前不会被阻塞。

通用用例可以重新处理来自DLQ的消息。通常,当您使用队列时,您也有一个DLQ,以便在处理过程中从“主”队列中失败的消息可以发送到DLQ,然后再进行处理。

现在,在这个体系结构中,您通常只在主队列中使用jms listener来处理消息。并且您将有一个单独的流,它可以有一个http listener,这样每当您准备重新处理来自DLQ的消息时,就可以触发HTTP。与http listener一起使用consume的流程--从DLQ和publish返回到主队列的所有消息(可能在一个循环中)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72810174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档