stomp.js无法接收RabbitMQ(3.11.7版本)中pika发送的消息
问题分析与解决方案
你的问题核心是STOMP客户端与AMQP客户端(pika)在RabbitMQ中的消息路由不匹配,导致前端订阅的Topic收不到后端发送的消息。
问题根源
- 前端STOMP客户端订阅的
/topic/test,在RabbitMQ的STOMP插件中,会自动映射到topic类型的交换器amq.topic,并以test作为路由键绑定临时队列。 - 你的Python后端使用pika发送消息时,用的是默认交换器(
exchange=''),直接把消息发送到名为/topic/test的队列中——这个队列和STOMP客户端绑定的临时队列完全无关,所以前端收不到消息。
修复步骤
修改Python后端代码,将消息发送到STOMP对应的topic交换器:
修改后的send.py代码
import pika connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) channel = connection.channel() # 不需要声明/topic/test队列,STOMP订阅时会自动创建绑定队列 # 直接使用RabbitMQ默认的topic交换器amq.topic(STOMP插件默认关联它) exchange_name = 'amq.topic' properties = pika.BasicProperties( content_type='application/json', content_encoding='utf-8', delivery_mode=2, ) # 发送到amq.topic交换器,路由键设为test(对应前端/topic/test的后缀) channel.basic_publish( exchange=exchange_name, routing_key='test', body='Hello World!', properties=properties ) print("消息已发送到topic交换器") connection.close()
额外说明
- RabbitMQ的STOMP插件默认规则:
/topic/{routing-key}会绑定到amq.topic交换器,使用{routing-key}作为路由键;/queue/{queue-name}则绑定到指定队列。 - 如果你想自定义交换器,需要先在后端声明topic类型的交换器,同时确保STOMP客户端的订阅路径对应正确的交换器映射(可通过RabbitMQ配置调整)。
内容的提问来源于stack exchange,提问作者qwerty_99
相关产品推荐
相关产品推荐

