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

stomp.js无法接收RabbitMQ(3.11.7版本)中pika发送的消息

问题分析与解决方案

你的问题核心是STOMP客户端与AMQP客户端(pika)在RabbitMQ中的消息路由不匹配,导致前端订阅的Topic收不到后端发送的消息。

问题根源

  1. 前端STOMP客户端订阅的/topic/test,在RabbitMQ的STOMP插件中,会自动映射到topic类型的交换器amq.topic,并以test作为路由键绑定临时队列。
  2. 你的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:25:35