我有一个系统,客户可以从队列中提取任务(通过amqp,使用RabbitMQ作为消息服务器)。当新客户端产生时,他拉出一个任务,告诉主服务器他是该特定任务的负责人,并开始执行长期任务。从服务器端,我希望能够在此客户端上取消任务,以便万一任务已引起错误,他可以继续执行另一任务。
将取消任务推送到现有任务队列上是没有选择的,因为我必须保证它能及时到达甚至在同一客户端。
生成客户端时,客户端建立专用的交换并只为他排队,服务器可以向其发送命令的一种好方法吗?
答案 0 :(得分:2)
客户端将没有设置专门的交换-您可以使用默认的主题交换,也可以设置自己的主题交换。
然后,当客户端提取任务时,它还会创建自己的排他队列,并将该队列绑定到主题交换以获取特定的“取消任务X”路由键。然后,客户端订阅此队列。如果必须取消任务,则“服务器端”可以使用适当的路由密钥将消息发布到主题交换机。
注意: RabbitMQ团队监视the rabbitmq-users
mailing list,并且有时仅在StackOverflow上回答问题。