You need to enable JavaScript to run this app. ReactJS使用STOMP连接ActiveMQ无法同时订阅多个主题如何解决
优惠活动
大模型
产品
解决方案
定价
更多

ReactJS使用STOMP连接ActiveMQ无法同时订阅多个主题如何解决

问题原因

STOMP 协议要求每个订阅请求的id头字段必须唯一,用于区分不同的订阅会话。你的代码中两次订阅共用了同一个headers对象,两个订阅的id均为username,后续的/topic/decoding订阅会直接覆盖之前同ID的/topic/salary订阅,因此服务端只会保留最后一个订阅,导致第一个订阅不生效。

如果确实调试时第一个client.subscribe断点没有触发,优先检查该行代码前后是否有语法错误,或者控制台是否抛出了JS异常导致代码执行中断。

修复方案

给两个订阅分别配置唯一的id即可,修改后代码如下:

const client = window.Stomp.client(`ws://${ipAddress}:61614`, 'aj6.stomp');
client.debug = null;
client.connect('user', 'pass', () => {
    client.subscribe(  
      '/topic/salary',
      message => {
        const body = JSON.parse(message.body);
        if (body && body.pcId) {
          salaries[body.pcId] = body;
          setState({ salaries});
        }
      },
      { id: 'sub-salary' }, // 配置唯一的订阅ID
    );
    client.subscribe(
      '/topic/decoding',
      message => {
        const newBody = JSON.parse(message.body);
        if (newBody && newBody.PcID) {
          consoleMessage[newBody.PcID] = newBody;
          setState({ consoleMessage });
        }
      },
      { id: 'sub-decoding' }, // 配置另一个唯一的订阅ID
    );
});

如果修改后仍有问题,可以临时开启client.debug = console.log,查看STOMP交互帧,确认客户端是否成功发送了两个不同ID的SUBSCRIBE帧,同时检查ActiveMQ服务端是否对salary主题配置了访问权限限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 10:00:00