如何使用Python、RabbitMQ、NodeJS实现在网站展示Hello World消息
可行实现方案
完全可以基于你当前的技术栈实现该需求,核心逻辑是通过RabbitMQ做消息中转,Python后端生产消息,Node.js服务作为消费者接收消息后向前端页面渲染内容。
方案整体流程
- Python后端作为生产者,生成"Hello World!"消息发送到RabbitMQ的指定队列
- Node.js服务(兼顾后端服务和前端资源托管)作为消费者,监听RabbitMQ队列接收消息
- Node.js将接收到的消息返回给前端页面渲染展示
前置依赖安装
- Python端需要安装pika库用于连接RabbitMQ:
pip install pika - Node.js端需要安装amqplib(RabbitMQ客户端)、express(托管前端页面):
npm install amqplib express
1. Python后端(消息生产者)实现
import pika # 连接本地RabbitMQ服务,可根据实际部署配置修改连接参数 connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() # 声明消息队列,队列不存在则自动创建 channel.queue_declare(queue='hello_world_queue') # 发送Hello World消息到队列 channel.basic_publish( exchange='', routing_key='hello_world_queue', body='Hello World!' ) print("已发送Hello World消息到RabbitMQ") connection.close()
2. Node.js服务(消息消费者+页面托管)实现
const express = require('express'); const amqp = require('amqplib'); const app = express(); const port = 3000; // 存储接收到的RabbitMQ消息 let receivedMessage = ''; // 连接RabbitMQ并监听目标队列 async function connectRabbitMQ() { try { const connection = await amqp.connect('amqp://localhost'); const channel = await connection.createChannel(); await channel.assertQueue('hello_world_queue'); console.log('已启动RabbitMQ队列监听'); channel.consume('hello_world_queue', (msg) => { if (msg) { receivedMessage = msg.content.toString(); console.log('收到消息:', receivedMessage); channel.ack(msg); } }); } catch (err) { console.error('RabbitMQ连接失败:', err); } } // 根路由返回前端页面,直接嵌入消息内容 app.get('/', (req, res) => { res.send(` <!DOCTYPE html> <html> <head> <title>消息展示页</title> </head> <body> <h1>${receivedMessage || '暂未收到RabbitMQ消息'}</h1> </body> </html> `); }); // 启动Node服务和RabbitMQ监听 connectRabbitMQ(); app.listen(port, () => { console.log(`Node服务已启动,访问 http://localhost:${port} 查看效果`); });
3. 运行验证步骤
- 先确保本地RabbitMQ服务已正常启动,默认端口无修改
- 运行Node.js服务:
node app.js - 运行Python生产者脚本:
python producer.py - 打开浏览器访问
http://localhost:3000,即可看到页面展示*Hello World!*内容
如果需要实现无刷新实时接收消息,可以在Node.js端集成WebSocket,收到RabbitMQ消息时主动推送给前端浏览器即可。
内容的提问来源于stack exchange,提问作者Quang nGUYEN
相关产品推荐
相关产品推荐

