我有一个发布者和消费者(RPC模型),每个都在不同的节点上运行。发布者将消息发布到特定队列,并且使用者侦听同一队列。消费者……
如果这是发布者可以并且应该处理的应用程序级错误,那么我认为这应该封装在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,并使用相同的响应格式来处理错误。