You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hono 1.10.0下AMQP设备接收命令后回复无法送达业务端问题咨询

问题根源排查

以下是你当前实现存在的3个核心问题:

  • 设备端响应sender配置错误
    你在设备端收到命令后构造响应sender时,传入了target地址为None,不符合Hono AMQP适配器的要求。Hono要求设备发送命令响应时,必须显式将sender的target地址设置为命令携带的reply_to字段值,不能使用匿名sender。
    你的错误写法:
sender = event.container.create_sender(self.connection, None, options=AtLeastOnce())

修改为:

sender = event.container.create_sender(self.connection, event.message.reply_to, options=AtLeastOnce())
  • 业务端命令发送链路提前断开
    从Dispatch Router日志可以看到,业务端发送命令的链路在建立后立刻被断开,命令还没下发到设备就被丢弃,设备根本收不到命令自然不会返回响应。问题出在你的AmqpSender实现:on_sendable触发后直接关闭了sender和连接,没有等待消息被Hono服务端确认。Hono的命令发送是异步流程,你需要等待消息返回accepted的disposition确认之后再关闭链路。
  • 缺少消息状态确认逻辑
    你当前的MessagingHandler子类没有实现on_accepted、on_rejected这类消息状态回调,无法感知消息是否被服务端正常接收,也就无法判断发送流程是否真正完成。

临时测试验证方案

你可以先修改AmqpSender的on_sendable逻辑,不要立刻关闭连接,等待2秒再关闭,验证命令是否能下发到设备:

def on_sendable(self, event):
    print("In Msg send")
    for msg in self.messages:
        event.sender.send(msg)
    # 新增等待,不要立刻关闭
    time.sleep(2)
    event.sender.close()
    event.connection.close()
    print("Sender & connection closed")

内容的提问来源于stack exchange,提问作者Armin Gruber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 09:06:07