Mule 忽略jms队列中的重复消息
我有mule flow,我使用JMS轮询每5分钟轮询一次队列,并处理队列中的所有消息。每当实体有更新时,我都会在队列中接收消息。每当我看到消息时,我都会从消息中提取唯一id,并使用该id通过web服务调用检索更新的实体。实体可以多次更新,因此我需要捕获所有更新。例如,如果队列中有10条消息引用同一实体更新,那么我需要忽略9条消息,只使用一条,因为所有消息都引用同一实体。我试着用幂等的消息过滤器。但它第一次运行良好。当应用程序在5分钟轮询频率后第二次从队列中读取消息,并且同一实体存在messagesupdates时,幂等元消息筛选器将忽略这些消息。理想情况下,应用程序将来也应该在不同的轮询间隔(如果有)期间使用相同的消息。只有在一个时间间隔内发现重复消息时,它才应忽略这些消息。但如果在未来的间隔期间发现,则应重复相同的处理忽略重复项,并仅处理在第一个间隔期间执行的一个 我希望我能够解释我的问题 任何帮助都将不胜感激 谢谢, Vijay尝试为筛选器对象存储设置entryTTL,如:Mule 忽略jms队列中的重复消息,mule,Mule,我有mule flow,我使用JMS轮询每5分钟轮询一次队列,并处理队列中的所有消息。每当实体有更新时,我都会在队列中接收消息。每当我看到消息时,我都会从消息中提取唯一id,并使用该id通过web服务调用检索更新的实体。实体可以多次更新,因此我需要捕获所有更新。例如,如果队列中有10条消息引用同一实体更新,那么我需要忽略9条消息,只使用一条,因为所有消息都引用同一实体。我试着用幂等的消息过滤器。但它第一次运行良好。当应用程序在5分钟轮询频率后第二次从队列中读取消息,并且同一实体存在message
<idempotent-message-filter idExpression="#[yourExpression]">
<in-memory-store entryTTL="300000"/>
</idempotent-message-filter>
这样,用于筛选邮件的条目将在五分钟后过期
HTH尝试为筛选器对象存储设置entryTTL,如:
<idempotent-message-filter idExpression="#[yourExpression]">
<in-memory-store entryTTL="300000"/>
</idempotent-message-filter>
这样,用于筛选邮件的条目将在五分钟后过期
HTH您想要使用幂等式消息筛选器,但需要使用自定义的幂等式表达式对其进行配置:
此表达式的文档说明:
定义从中提取ID时要使用的一个或多个表达式
信息。例如,可以合并到标题
作为提供幂等性的消息的ID:
“[标题:foo,bar]”。或者,您可以将消息ID与
标题:'[message:id]-[header:foo]'。如果未设置此属性,
默认情况下将使用“[message:id]”
然后,构思一个表达式,该表达式具有一个组件,该组件对于一次轮询相同,可能是系统时间的模,对于在一次轮询中被视为相同的消息相同。幂等消息筛选器是您想要使用的,但您需要使用自定义的幂等表达式对其进行配置:
此表达式的文档说明:
定义从中提取ID时要使用的一个或多个表达式
信息。例如,可以合并到标题
作为提供幂等性的消息的ID:
“[标题:foo,bar]”。或者,您可以将消息ID与
标题:'[message:id]-[header:foo]'。如果未设置此属性,
默认情况下将使用“[message:id]”
然后,构思一个表达式,该表达式的一个组件对于一次轮询来说是相同的,可能是系统时间的模,对于一次轮询中被认为相同的消息来说是相同的。谢谢David/Daniel。我使用它如下: 幂等元消息筛选器idExpression=XPATH表达式以检索实体id> 内存存储入口TTL=60000/> /幂等元消息过滤器> 这对我来说很好 谢谢你们的帮助
维杰谢谢大卫/丹尼尔。我使用它如下: 幂等元消息筛选器idExpression=XPATH表达式以检索实体id> 内存存储入口TTL=60000/> /幂等元消息过滤器> 这对我来说很好 谢谢你们的帮助
维杰谢谢丹尼尔。它解决了我的问题。感谢您在这方面的帮助。因为它解决了您的问题,请将答案标记为已接受。谢谢你,丹尼尔。它解决了我的问题。感谢您在这方面的帮助。因为它解决了您的问题,请将答案标记为已接受。维杰,看来你是新来的。如果某个答案对您有帮助,请单击答案旁边的复选框,将其标记为已接受。这会激励人们去帮助。维杰,看起来你是新来的。如果某个答案对您有帮助,请单击答案旁边的复选框,将其标记为已接受。提示:永远不要丢弃代码;永远要考虑至少添加一点解释。提示:永远不要只删除代码;至少要考虑增加一点解释。
<idempotent-message-filter idExpression="#[message:payload]" doc:name="Idempotent Message" throwOnUnaccepted="true" onUnaccepted="ValidationFailFlow">
<in-memory-store name="myInMemoryObjectStore" entryTTL="120" expirationInterval="3600" maxEntries="60000" ></inmemory-store>
</idempotent-message-filter>