说我想在A和B之间建立友谊。
说我想结束A和B之间的友谊。
这是我要发送到具有多个消费者(工作人员)的队列的两个任务。
我想保证处理顺序那么,如何避免第一个任务在第一个之前执行?
我的解决方案:让任务粘性(关于A的任务总是发送给同一个消费者)。
实施:使用RabbitMQ的交换并将任务映射到可用的消费者。
如何将A映射到其消费者?我正在考虑nginx的ip_hash。我想我需要类似的东西。
我不知道它是否相关,但A和B是uuid.v4()
UUID。
你能指出我需要完成映射的算法吗?
答案 0 :(得分:0)
嗯,有两种选择:
当然你可以计算一下A / B的哈希值,但是IMO会比预备app更费力。使用excahnges / queues的scalling app并不是很好 - 您将创建越来越多的队列,并且它将在rabbitmq中以太多的队列/交换结束。
如果你必须使用你指定的解决方案 - 你可以例如从A和B计算crc32,并使用它的值calcalate到哪个队列任务应该发送。但是,拥有多个消费者可能会在这里造成错误 - 如果其中一个消费者被某种方式阻止而其他消费者会因破坏友谊而收到消息呢?使用这个解决方案,我说每组A / B超过1名工人是危险的。