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

Wildfly Swarm中STOMP接收器启动失败问题求助

解决Wildfly Swarm 2017.12.1中Artemis STOMP接收器加载失败的问题

你这是踩了个典型的依赖兼容坑——你用了ActiveMQ 5.x的STOMP相关依赖,但Wildfly 11(以及对应的Swarm版本)内嵌的是Apache ActiveMQ Artemis 1.5.x,这俩是完全不同的产品,Artemis有自己独立的STOMP协议实现,和ActiveMQ 5的依赖根本不兼容,这就是你碰到AMQ222203错误的核心原因。下面是一步步的解决办法:

1. 先清理错误的依赖

把你pom里加的这几个依赖全部删掉,它们完全不适合当前的Artemis环境:

<dependency>
  <groupId>org.apache.activemq</groupId>
  <artifactId>activemq-rar</artifactId>
  <version>5.15.2</version>
  <type>rar</type>
</dependency>
<dependency>
  <groupId>org.apache.activemq</groupId>
  <artifactId>activemq-stomp</artifactId>
  <version>5.15.2</version>
</dependency>
<dependency>
  <groupId>io.netty</groupId>
  <artifactId>netty-all</artifactId>
  <version>4.1.5.Final</version>
</dependency>

Swarm会自动管理Netty相关依赖,手动添加反而容易引发版本冲突。

2. 引入正确的Artemis STOMP支持依赖

你需要添加和Wildfly 11内嵌Artemis版本严格匹配的STOMP协议模块,同时确保Swarm的messaging片段正确加载。在pom.xml里加入以下依赖:

<!-- Wildfly Swarm Messaging ActiveMQ片段,确保Artemis核心功能正常加载 -->
<dependency>
  <groupId>org.wildfly.swarm</groupId>
  <artifactId>messaging-activemq</artifactId>
  <version>2017.12.1</version>
</dependency>
<!-- Artemis STOMP协议模块,版本和Wildfly 11内嵌的Artemis保持一致(1.5.6) -->
<dependency>
  <groupId>org.apache.activemq</groupId>
  <artifactId>artemis-protocol-stomp</artifactId>
  <version>1.5.6</version>
  <scope>provided</scope>
</dependency>

这里scope=provided是因为Swarm的messaging片段已经包含了Artemis核心包,但STOMP模块默认不会自动引入,所以需要显式添加,版本一定要和Wildfly 11对应的Artemis版本匹配(1.5.6是Wildfly 11的默认Artemis版本)。

3. 验证你的接收器配置

你的acceptor配置本身没大问题,可以再确认几个细节:

<acceptor name="stomp-acceptor" factory-class="org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptorFactory">
  <param name="protocols" value="STOMP"/>
  <param name="host" value="${jboss.bind.address:127.0.0.1}"/>
  <param name="port" value="61613"/>
  <!-- 可选:如果需要指定STOMP版本,可添加这个参数 -->
  <param name="stomp-version" value="1.2"/>
</acceptor>

确保factory-class是Artemis的Netty实现,这点你已经做对了。

4. 确认Swarm的片段自动识别

如果你依赖Swarm自动加载配置片段,确保你的standalone-full.xml里的messaging配置能被Swarm正确识别。要是还是有问题,可以尝试在启动类的main()方法里手动启用messaging片段:

public static void main(String[] args) throws Exception {
    Swarm swarm = new Swarm();
    swarm.fraction(new MessagingFraction());
    swarm.start();
}

为什么之前的方案没用?

你找的那些资源大多是关于连接外部ActiveMQ或者MQTT的场景,和你当前内嵌Artemis启用STOMP的需求不匹配。Wildfly Swarm 2017.12.1对Artemis 1.5的STOMP支持是完整的,只是你用错了依赖——ActiveMQ 5和Artemis虽同属Apache,但代码库完全独立,不能混用它们的协议模块。

按照上面的步骤调整后,重新构建fat WAR并启动,STOMP接收器应该就能正常加载,不会再出现AMQ222203错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:18:05