服务器可以发布广播消息来终止工作人员吗? Rabbitmq

时间:2019-05-17 19:21:18

标签: python rabbitmq message-queue

例如,如果某个工人正在处理队列中的消息,是否可以将消息广播给所有工人以停止处理他们的工作?

我正在使用 rabbitmq队列

我需要暂停工作。

假设有四个并行的支付工人正在运行。 就像许多在Amazon上付款的客户一样,客户的每个请求都被推入队列,工作人员将从队列中获取请求消息

def payment_worker():
      check_account_is_valid()
      check_card_id_valid()
      post_to_paymentGateway() #it has only one merchant (lets' say AMAZON PAY)

因此,如果四个支付工人并行运行,如果其中一个工人在post_to_paymentGateway方法上失败,则我需要暂停剩余的工人,直到亚马逊支付解决。这样,当我恢复工作时,就不会再有付款失败了。

有解决方案吗?

1 个答案:

答案 0 :(得分:1)

不,不能。

如果您的工作者是单线程的,并且从共享工作队列中读取,则您无法可靠地“暂停”他们。对于这些工作人员,一种可能的方法是在处理每条消息之前,向某些集中化机制(api,db,redis等)查询“运行”状态。