我有分布式系统,其中存在用于接受订单的服务。 收货订单是同时发送给所有执行人的,但是只有一位执行人可以接受。为此,我使用RabbitMQ和SQL Server。
当两个执行人试图同时接受命令时,如何处理案件? 绝对可以在SQL Server中设置事务隔离,但是Rabbit呢?
我知道,这个问题如此广泛,但是我不知道该如何处理?
答案 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。