服务器可以 post 广播消息来终止工人吗? Rabbitmq

Can a server post a broadcast message to terminate workers? Rabbitmq

例如,如果一个 worker 正在处理来自队列的消息,有没有办法向所有 worker 广播消息以停止处理他们的工作?

我正在使用 rabbitmq 队列

我需要暂停工人。

假设四个并行支付工作者是运行。 比如,很多客户在亚马逊上做支付,客户的每个请求都被推入队列,工作人员将从队列中获取请求消息

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 方法上失败,我需要暂停剩余的工作人员,直到亚马逊支付解决。这样当我恢复一个工人时就不会再有任何付款失败。

有解决办法吗?

不,不能。

如果您的工作人员 single-threaded 并从共享工作队列中读取数据,那么您无法可靠地 "pause" 他们。一种可能的方法是让这些工作人员在处理每条消息之前查询一些集中机制(api、数据库、redis 等)以获得 "go" 状态。