Rabbitmq 寻找正确的mule组件以fifo顺序解复用消息
我一直在搜索用于以下问题的正确消息传递模式: 我有一个队列,其中包含域中每个用户ID的消息,每条消息都是userChanged事件。业务要求是必须以FIFO顺序处理特定用户ID的所有消息,如果在处理特定用户ID的消息期间发生错误,则在将该错误标记为已成功处理之前,不应再进行处理。必须处理所有消息,并且需要在集群ESB环境中部署此解决方案 我想将这些事件分解为每个用户ID的FIFO队列,这样我就可以并行处理来自不同用户ID的消息,并按顺序处理每个用户的消息 到目前为止,我已经提出了涉及Mule和Rabbit的两种可能的解决方案,但这两种解决方案都涉及定制组件或我不知道的现有组件Rabbitmq 寻找正确的mule组件以fifo顺序解复用消息,rabbitmq,mule,activemq,messaging,mule-studio,Rabbitmq,Mule,Activemq,Messaging,Mule Studio,我一直在搜索用于以下问题的正确消息传递模式: 我有一个队列,其中包含域中每个用户ID的消息,每条消息都是userChanged事件。业务要求是必须以FIFO顺序处理特定用户ID的所有消息,如果在处理特定用户ID的消息期间发生错误,则在将该错误标记为已成功处理之前,不应再进行处理。必须处理所有消息,并且需要在集群ESB环境中部署此解决方案 我想将这些事件分解为每个用户ID的FIFO队列,这样我就可以并行处理来自不同用户ID的消息,并按顺序处理每个用户的消息 到目前为止,我已经提出了涉及Mule和R
userChangedEvent-#[flowVars.userid]
,并将消息发布到该队列。自定义组件需要执行以下操作:
A.创建一个共享对象映射,该映射将标识所有动态amqp侦听器流(如果不存在)
B检查映射以查看是否存在该用户标识的侦听器流的实例。如果没有,请添加动态amqp侦听器流的实例,该实例将侦听userChangedEvent-#[flowVars.userid]
队列,并使用userid作为键将其添加到映射中。
C启动流程。
D动态流需要配置为在单线程配置中处理,在业务逻辑成功完成后手动确认消息,并在出现错误时停止流(userChangedEvent-0to1000、userChangedEvent-1000to2000等等)
,这样我们就可以预定义我们需要的所有流和相关的amqp侦听器,并消除对动态流的需求,但这对我来说是一个不雅观的解决方案
我觉得必须有一个消息模式来解决这个问题,但我撕毁了我的EIP副本,没有用!如有任何建议,将不胜感激
更新:从概念上讲,这就是我想要的,一个带通道的解复用器(我称之为bucket),但我认为动态通道创建(每个用户ID 1个)会更好:你不可能同时拥有多个并发消费者并同时遵守fifo订单。但是,您可以使用名为“独占使用者”的功能拥有多个非并发使用者,以提高可用性。您可以使用的属性
exclusiveConsumers
激活此功能
关于错误停止处理,我可以建议两种不同的方法:
- 如果此业务需求可能发生变化,您可以利用复杂的事件处理引擎作为事件的信号量
- 否则,您可以使用如上所述的断路器模式,这可能是最简单的方法