Может ли сервер опубликовать широковещательное сообщение для увольнения работников?RabbitMQ - PullRequest
1 голос
/ 17 мая 2019

Например, если работник обрабатывает сообщение из очереди, есть ли способ передать сообщение всем работникам, чтобы они прекратили обработку своей работы?

Я использую 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, мне нужно приостановить работу оставшихся рабочих до разрешения оплаты Amazon. Так что, когда я вернусь к работнику, не будет дальнейших ошибок при оплате.

Есть ли решение?

1 Ответ

1 голос
/ 20 мая 2019

Нет, это невозможно.

Если ваши рабочие являются однопоточными и читают из общей рабочей очереди, то вы не сможете надежно «приостановить» их.Возможный подход заключается в том, чтобы эти работники запрашивали некий централизованный механизм (api, db, redis и т. Д.) О состоянии «go» перед обработкой каждого сообщения.

...