在Rabbitmq RPC模型中处理异常-PHP

时间:2019-02-22 12:41:54

标签: rabbitmq php-amqplib

我有一个发布者和使用者(RPC模型),他们每个人都在不同的节点上运行。发布者将消息发布到特定队列,而使用者则收听相同的队列。 使用者处理消息时,从应用程序本身引发的异常,例如提供的无效参数或任何其他类型的异常。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

然后,您可以返回一条指示失败的消息:

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

然后由发布者中的代码“解开”此错误并适当地处理它。

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