Обработка исключений в RPC-модели rabbitmq - PHP - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть издатель и потребитель (модель RPC), каждый из которых работает на разных узлах.Издатель публикует сообщение в определенной очереди, а потребитель прослушивает ту же очередь.Когда потребитель обрабатывает сообщение, исключение выдается из самого приложения, например, указывается недопустимый аргумент или исключения любого другого типа.

Как я могу обработать это исключение и ответить издателю сообщением об исключении?

1 Ответ

0 голосов
/ 27 февраля 2019

Если это ошибка уровня приложения, которую издатель может и должен обработать, то я думаю, что она должна быть инкапсулирована на уровне RPC, а не на транспортном уровне.То есть это должна быть часть отправляемых вами данных, а не какой-либо статус в RabbitMQ.

Под этим я подразумеваю, что если ответ потребителя в настоящее время выглядит следующим образом:

{"answer": 42, "years": 7500000}

Вы можете изменить его, чтобы указать успешность:

{"success": true, "result": {"answer": 42, "years": 7500000}}

Затем вы можете вместо этого вернуть сообщение, указывающее на ошибку:

{"success": false, "error": "Unable to reticulate splines"}

Тогда дело за кодом в издателе«развернуть» эту ошибку и обработать ее соответствующим образом.

Это делает весь механизм независимым от того, как работает RPC - вы можете заменить RabbitMQ на ZeroMQ или HTTP API и т. д. и использовать тот же формат ответа дляобрабатывать ошибки.

...