使用RabbitMQ和SQL Server的竞争过程

时间:2019-01-02 16:17:49

标签: sql-server architecture rabbitmq

我有分布式系统,其中存在用于接受订单的服务。 收货订单是同时发送给所有执行人的,但是只有一位执行人可以接受。为此,我使用RabbitMQ和SQL Server。

当两个执行人试图同时接受命令时,如何处理案件? 绝对可以在SQL Server中设置事务隔离,但是Rabbit呢?

我知道,这个问题如此广泛,但是我不知道该如何处理?

2 个答案:

答案 0 :(得分:2)

  

当两个执行人试图同时接受命令时,如何处理案件?   绝对可以在SQL Server中设置事务隔离,但是Rabbit呢?

让SQL Server保证最多一个“执行者”可以接受命令。

您可以让多个会话运行如下查询:

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

只有一个成功更新订单并返回一行。

答案 1 :(得分:1)

RabbitMQ的默认行为应该是将消息发送给单个使用者。我能想到的唯一方法就是配置Topics而不是work queues