【问题标题】:Can a server post a broadcast message to terminate workers? Rabbitmq服务器可以发布广播消息来终止工作人员吗?兔MQ
【发布时间】:2019-05-17 19:21:18
【问题描述】:

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

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

有解决办法吗?

【问题讨论】:

  • 为什么要暂停工作人员?其他工人如何依赖+工人?
  • 关闭连接工作者消费者所属?你可以通过rabbitmq managment API
  • @menya 我需要暂停工作人员,而不是关闭。因为暂停的工作人员需要从我暂停的地方开始。
  • 我认为没有办法做到这一点。消费者只能自己暂停称为channel.basicCancel(tag)。如果您想在pause/resume 消费者时保持通道打开,可以添加另一个包含pause/resume 信号消息的队列。

标签: python rabbitmq message-queue


【解决方案1】:

不,不能。

如果您的工作人员是单线程的并且从共享工作队列中读取,那么您就无法可靠地“暂停”他们。一种可能的方法是让这些工作人员在处理每条消息之前查询一些集中式机制(api、db、redis 等)以获得“go”状态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 2023-01-04
    相关资源
    最近更新 更多