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

Windows10与树莓派4跨设备RabbitMQ通信消费失败问题咨询

问题根源

你当前两端代码都将RabbitMQ连接地址配置为localhost,该地址指向设备自身的本地回环接口,因此Windows生产者发送的消息存储在Windows本地的RabbitMQ服务中,树莓派消费者连接的是树莓派本地的RabbitMQ服务,两个队列完全独立,自然无法跨设备接收消息。

修复步骤

我们默认选择树莓派作为RabbitMQ服务部署端,你也可以根据需求选择Windows作为服务端,操作逻辑一致:

  1. 放开树莓派RabbitMQ的本地访问限制
    新建/编辑树莓派上的RabbitMQ配置文件/etc/rabbitmq/rabbitmq.conf,添加如下配置:
    loopback_users = none
    
    该配置允许默认的guest账号从非本地地址访问RabbitMQ。
  2. 开放树莓派防火墙端口
    RabbitMQ默认AMQP协议端口为5672,执行如下命令开放端口并重启服务:
    sudo ufw allow 5672
    sudo systemctl restart rabbitmq-server
    
  3. 查看树莓派的局域网IP
    在树莓派终端执行ip a,查看当前局域网段的IP地址,示例为192.168.3.12,后续操作替换为你自己的实际IP即可。
  4. 修改两端代码的连接地址

    Windows生产者代码修改

    将连接参数的host改为树莓派的局域网IP:
    import pika
    
    # 此处替换为树莓派的实际局域网IP
    connection = pika.BlockingConnection(
    pika.ConnectionParameters(host='192.168.3.12'))
    channel = connection.channel()
    
    channel.queue_declare(queue='my-queue')
    
    channel.basic_publish(exchange='', routing_key='my-queue', body='Hello World from windows!!')
    print(" [x] Sent 'Hello World from windows!'")
    connection.close()
    

    树莓派消费者代码修改

    将host变量改为树莓派的局域网IP(也可以保留localhost,统一配置更便于后续维护):
    import pika
    
    # 此处替换为树莓派的实际局域网IP
    host = '192.168.3.12'
    queue = 'my-queue'
    
    def on_message(ch, method, properties, body):
        message = body.decode('UTF-8')
        print(message)
    
    def main():
        connection_params = pika.ConnectionParameters(host=host)
        connection = pika.BlockingConnection(connection_params)
        channel = connection.channel()
    
        channel.queue_declare(queue=queue)
    
        channel.basic_consume(queue=queue, on_message_callback=on_message, 
         auto_ack=True)
    
        print('Subscribed to ' + queue + ', waiting for messages...')
        channel.start_consuming()
    
    if __name__ == '__main__':
        main()
    

验证操作

配置完成后先在Windows端ping树莓派的IP,确认网络连通,再先后启动消费者、生产者,即可看到树莓派端成功收到消息。
如果出现权限报错,可以在连接参数中添加账号密码配置:

credentials = pika.PlainCredentials('guest', 'guest')
connection = pika.BlockingConnection(pika.ConnectionParameters(host='树莓派IP', credentials=credentials))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:45:03