Отложенная доставка JMS на основе условных переменных

Я ищу возможность в любой из наиболее популярных очередей сообщений (AMPQ, RabbitMQ, ActiveMQ и т. Д.) Условно задержать доставку сообщения.

Например:

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

Поскольку сообщение системы B удовлетворяет условию, установленному в сообщении для системы A, сообщение разблокируется и доставляется.

Существуют ли такие стратегии?

1 ответ

Решение

Вроде да, с RabbitMQ.

Вам нужны две вещи:

  1. код, который проверяет условие - ваш код, а не код RabbitMQ.
  2. плагин для отложенного обмена сообщениями https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/

RabbitMQ не имеет возможности обрабатывать логические операторы или код. Но вы уже пишете код, так что вы можете легко сделать это в своем коде.

Если условие истинно, отправьте ваше сообщение в службу отложенных сообщений. Если это не так, отправьте ваше сообщение на обычный обмен.

Другие вопросы по тегам