当我们从spring boot服务向rabbitmq发送消息时,我们收到以下错误。这也是间歇性的,我们无法重现这一点。
[AMQP Connection 123.11.xxx.xx:5672] ERROR [] org.springframework.amqp.rabbit.connection.CachingConnectionFactory - 频道关闭:频道错误;协议方法:#method(reply-code = 406,reply-text = PRECONDITION_FAILED - 快速回复消费者不存在,class-id = 60,method-id = 40)
有没有人遇到过与rabbitmq类似的问题。 请帮助我们提供您的意见。
答案 0 :(得分:0)
这很可能意味着请求者已经超时并取消了直接replyTo队列中的使用者。或者,请求的应用程序已停止。
如果请求者也是Spring AMQP应用程序,则默认replyTimeout
为5000毫秒(5秒)。如果服务器端需要的时间超过该时间,请求者将超时,您将在服务器上收到此错误。
您可以在请求replyTimeout
上增加RabbitTemplate
属性。
修改强>
Spring AMQP 2.0.x(需要Spring Framework 5.x)使用寿命更长的直接回复消费者,因此您不应该收到这些消息(但客户端仍然会超时,您会收到警告登录客户端,并在延迟交付到达时记录日志。
答案 1 :(得分:0)
对于由于此错误而最终到这里的其他人,在我看来,当我确保以下两项时,该问题已解决:
amq.rabbitmq.reply-to
队列中消费reply-to
队列中很遗憾,我在任何地方都看不到这个documented。
答案 2 :(得分:0)
我在直接回复模式下遇到了完全相同的问题,我必须做的是:
在发布请求消息之前,确保回复(而不是请求)的使用者正在运行。
此外,正如文档所说:
RPC 客户端必须在自动确认模式下消费。这是因为回复消息没有队列 如果客户端断开连接或拒绝回复,则返回 留言。
joniba
所说,我还为发布商和消费者使用了相同的模型/渠道,但我不确定这是否确实有帮助。