在前提条件下使用Mule 4.4和ActiveMQ。我正试图更好地理解Mule如何处理消息。
我试着搜索互联网,但没有找到任何关于同样的细节。
我有一个jms:listener
<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
<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中有这两个组件呢?
发布于 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返回到主队列的所有消息(可能在一个循环中)
https://stackoverflow.com/questions/72810174
复制相似问题