基于条件变量的 JMS 延迟交付

JMS Delayed Delivery based on conditional variable(s)

我正在寻找在任何更流行的消息队列(AMPQ、RabbitMQ、ActiveMQ 等)中有条件地延迟消息传递的可能性。

例如:

System A sends a message(foo, condition = bar.x > 1);
System B sends a message(bar, x = 2)

由于系统B的消息满足系统A的消息设置的条件,消息被解锁并发送。

是否存在这样的策略?

有点,是的,使用 RabbitMQ。

你需要两件事:

  1. 检查条件的代码 - 您的代码,而不是 RabbitMQ 代码。
  2. 延迟消息交换插件https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/

RabbitMQ 没有处理逻辑语句或代码的能力。但是您已经在编写代码,因此您可以在代码中轻松地做到这一点。

如果条件为真,则将您的消息发送到延迟消息交换。如果不正确,请将您的消息发送到普通交易所。