例如,如果某个工人正在处理队列中的消息,是否可以将消息广播给所有工人以停止处理他们的工作?
我正在使用 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方法上失败,则我需要暂停剩余的工人,直到亚马逊支付解决。这样,当我恢复工作时,就不会再有付款失败了。
有解决方案吗?
答案 0 :(得分:1)
不,不能。
如果您的工作者是单线程的,并且从共享工作队列中读取,则您无法可靠地“暂停”他们。对于这些工作人员,一种可能的方法是在处理每条消息之前,向某些集中化机制(api,db,redis等)查询“运行”状态。