Отложенная доставка 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.
Вам нужны две вещи:
- код, который проверяет условие - ваш код, а не код RabbitMQ.
- плагин для отложенного обмена сообщениями https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/
RabbitMQ не имеет возможности обрабатывать логические операторы или код. Но вы уже пишете код, так что вы можете легко сделать это в своем коде.
Если условие истинно, отправьте ваше сообщение в службу отложенных сообщений. Если это не так, отправьте ваше сообщение на обычный обмен.