处理 rabbitmq RPC 模型中的异常 - PHP

Handling exception in rabbitmq RPC model - PHP

我有一个发布者和消费者(RPC 模型),每个 运行 在不同的节点上。发布者将消息发布到特定的队列,消费者监听同一个队列。 当消费者处理消息时,应用程序本身抛出异常,例如提供的参数无效或任何其他类型的异常。

如何处理此异常并用异常消息响应发布者?

如果这是发布者可以并且应该处理的应用程序级错误,那么我认为应该将其封装在 RPC 层,而不是传输层。也就是说,它应该是您发送的数据的一部分,而不是 RabbitMQ 中任何类型的状态。

我的意思是,如果当前来自消费者的响应如下所示:

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

您可以更改它以指示成功:

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

然后您可以 return 一条指示失败的消息:

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

然后由发布者中的代码来 "unwrap" 这个错误并适当地处理它。

这使得整个机制与 RPC 的工作方式无关 - 您可以用 ZeroMQ 或 HTTP API 等替换 RabbitMQ,并使用相同的响应格式来处理错误。