如何让部署在JBoss中的Spring Boot应用与外部ActiveMQ Artemis服务器通信?
如何让部署在JBoss中的Spring Boot应用与外部ActiveMQ Artemis服务器通信?
我来帮你一步步梳理怎么搞定这个配置问题,让你的Spring Boot应用在JBoss里顺利连上外部的ActiveMQ Artemis服务器!
1. 先搞定Maven依赖配置
首先得确保你的pom.xml里引入了正确的Artemis starter依赖,这个是Spring Boot集成Artemis的基础,注意版本要和你的Spring Boot版本匹配,同时也要兼容你用的JBoss版本,避免出现依赖冲突:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-artemis</artifactId> </dependency>
2. 配置JBoss的远程连接工厂
接下来要在JBoss的配置文件里(比如standalone.xml或者domain.xml,看你用的是单机还是域模式),定义一个指向外部Artemis的连接工厂,还要配上对应的连接器和Socket绑定,注意JNDI名称要和后面Spring配置里的一致哦:
<subsystem xmlns="urn:jboss:domain:messaging-activemq:14.0"> <!-- 配置连接外部Artemis的池化连接工厂 --> <pooled-connection-factory name="artemis-remoteCF" entries="java:/jms/artemis-remoteCF" connectors="remote-artemis" transaction="XA" /> <!-- 定义远程连接器 --> <connectors> <netty-connector name="remote-artemis" socket-binding="remote-artemis" /> </connectors> <!-- 配置外部Artemis的Socket绑定,替换成你实际的服务器IP和端口 --> <socket-bindings> <remote-destination-outbound-socket-binding name="remote-artemis"> <remote-destination host="你的外部Artemis服务器IP" port="61616" /> </remote-destination-outbound-socket-binding> </socket-bindings> </subsystem>
这里的端口61616是Artemis的默认远程连接端口,要是你改了外部服务器的端口,记得同步替换哈!
3. 配置Spring Boot应用
现在回到Spring Boot的application.properties,我们要告诉Spring用JBoss原生的Artemis客户端,并且关联刚才在JBoss里配置的JNDI连接工厂:
# 启用Native模式,使用JBoss提供的Artemis客户端实现 spring.artemis.mode=native # 指向JBoss中配置的远程连接工厂的JNDI名称 spring.jms.jndi-name=java:/jms/artemis-remoteCF
4. 一些容易踩坑的注意事项
- 权限配置:确保你的Spring Boot应用在JBoss里有访问这个JNDI连接工厂的权限,可以在应用的
jboss-web.xml里添加资源引用声明:
<jboss-web> <resource-ref> <res-ref-name>jms/artemis-remoteCF</res-ref-name> <jndi-name>java:/jms/artemis-remoteCF</jndi-name> </resource-ref> </jboss-web>
- 依赖冲突排查:如果启动时出现类加载异常,大概率是Spring Boot自带的Artemis依赖和JBoss内置的有冲突,可以在
pom.xml里排除Spring Boot的Artemis客户端依赖,强制使用JBoss的版本:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-artemis</artifactId> <exclusions> <exclusion> <groupId>org.apache.activemq</groupId> <artifactId>artemis-jms-client</artifactId> </exclusion> </exclusions> </dependency>
- 测试验证:最后可以写个简单的JMS生产者代码,注入
JmsTemplate发送一条测试消息,看看能不能成功投递到外部Artemis的队列里,这样就能确认配置是否生效啦!
内容来源于stack exchange
相关产品推荐
相关产品推荐

