Windows10与树莓派4跨设备RabbitMQ通信消费失败问题咨询
问题根源
你当前两端代码都将RabbitMQ连接地址配置为localhost,该地址指向设备自身的本地回环接口,因此Windows生产者发送的消息存储在Windows本地的RabbitMQ服务中,树莓派消费者连接的是树莓派本地的RabbitMQ服务,两个队列完全独立,自然无法跨设备接收消息。
修复步骤
我们默认选择树莓派作为RabbitMQ服务部署端,你也可以根据需求选择Windows作为服务端,操作逻辑一致:
- 放开树莓派RabbitMQ的本地访问限制
新建/编辑树莓派上的RabbitMQ配置文件/etc/rabbitmq/rabbitmq.conf,添加如下配置:
该配置允许默认的loopback_users = noneguest账号从非本地地址访问RabbitMQ。 - 开放树莓派防火墙端口
RabbitMQ默认AMQP协议端口为5672,执行如下命令开放端口并重启服务:sudo ufw allow 5672 sudo systemctl restart rabbitmq-server - 查看树莓派的局域网IP
在树莓派终端执行ip a,查看当前局域网段的IP地址,示例为192.168.3.12,后续操作替换为你自己的实际IP即可。 - 修改两端代码的连接地址
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
相关产品推荐
相关产品推荐

