使用Bunny连接RabbitMQ报错:Must be one of [:method, :headers, :body, :heartbeat]
解决RabbitMQ连接时出现的「Must be one of [:method, :headers, :body, :heartbeat]」错误
错误现象
使用Bunny连接RabbitMQ时,执行conn.start抛出错误,回溯信息如下:
.../amq-protocol-2.3.2/lib/amq/protocol/frame.rb:67:in `decode_header'
错误提示:Must be one of [:method, :headers, :body, :heartbeat]
排查出的低级错误
我排查后发现是连接端口/地址配置错误:误将RabbitMQ的连接端口写成了其他服务的端口(比如Redis的6379),或是连接到了非RabbitMQ服务的地址。此时客户端收到的不是RabbitMQ的AMQP协议帧,导致解码时无法识别帧类型,触发该错误。
修复方式
检查Bunny.new中的连接参数,确认:
host参数为RabbitMQ服务的正确地址port参数为RabbitMQ的默认端口5672(或自定义配置的端口)
示例正确初始化代码:
conn = Bunny.new(host: "localhost", port: 5672, username: "guest", password: "guest") conn.start
补充说明
这类低级错误容易在复制配置、多服务端口混淆时出现。如果遇到相同错误,优先检查连接参数的正确性,无需过度纠结AMQP协议帧的解码逻辑。
内容的提问来源于stack exchange,提问作者Ammypka
相关产品推荐
相关产品推荐

