Конкурентный процесс с использованием RabbitMQ и SQL Server - PullRequest
0 голосов
/ 02 января 2019

У меня есть распределенная система, где существует сервис для приема заказов. Входящий заказ отправляется всем исполнителям одновременно, но только один исполнитель может принять это. Для этого я использую RabbitMQ и SQL-сервер.

Как поступить, если два исполнителя одновременно пытаются принять заказ? Определенно я могу настроить изоляцию транзакций в SQL Server, но как насчет Кролика?

Я знаю, этот вопрос настолько широк, но мне интересно, как вообще с этим справиться?

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Как поступить, если два исполнителя одновременно пытаются принять заказ? Определенно я могу настроить изоляцию транзакций в SQL Server, но как насчет Кролика?

Пусть SQL Server гарантирует, что максимум один «исполнитель» может принять заказ.

Вы можете разрешить нескольким сеансам выполнять запрос, например:

update orders
set state = 'ACCEPTED' 
output inserted.id, inserted.state 
where id=@ID and state ='NEW'

И только один успешно обновит заказ и вернет строку.

0 голосов
/ 02 января 2019

Поведение RabbitMQ по умолчанию должно заключаться в отправке сообщения одному потребителю. Единственный способ понять ваше поведение - это настроить Темы вместо рабочих очередей .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...