嵌入式Tomcat中配置ActiveMQ Web控制台连接现有Broker
解决ActiveMQ Web Console连接现有Broker(嵌入式Tomcat部署)的问题
我来帮你搞定这个问题,之前我也遇到过类似的场景,下面是一步步亲测有效的解决方案:
1. 配置Web Console连接属性的位置
你需要的那几个属性可以通过以下三种方式设置(优先级从高到低):
- 嵌入式Tomcat启动参数:这是最推荐的方式,不用修改war包内容,在启动Tomcat时添加JVM参数即可:
-Dwebconsole.type=properties -Dwebconsole.jms.url=tcp://localhost:61616 -Dwebconsole.jmx.url=service:jmx:rmi:///jndi/rmi://localhost:1099/karaf-trun - 项目类路径下的配置文件:如果你的嵌入式Tomcat是项目的一部分,可以在
src/main/resources下新建webconsole.properties,写入:webconsole.type=properties webconsole.jms.url=tcp://localhost:61616 webconsole.jmx.url=service:jmx:rmi:///jndi/rmi://localhost:1099/karaf-trun - 修改war包内的配置:直接修改war包中
WEB-INF/classes/webconsole.properties(不推荐,因为war包更新后配置会丢失)
2. 修改XML配置,移除本地Broker启动逻辑
原来的配置会自动启动一个新的Broker,我们需要彻底关掉这个行为:
修改WEB-INF/webconsole-embedded.xml
删掉原来的brokerService bean(就是那个BrokerFactoryBean),替换成连接现有Broker的JMS连接工厂:
<!-- 移除这一段本地Broker的配置: <bean id="brokerService" class="org.apache.activemq.xbean.BrokerFactoryBean"> <property name="config" value="/WEB-INF/activemq.xml"/> </bean> --> <!-- 添加连接现有Broker的连接工厂 --> <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="${webconsole.jms.url}"/> </bean>
修改WEB-INF/activemq.xml
清空里面的<broker>节点内容,只保留XML根声明即可(避免加载时出错):
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> <!-- 不再配置本地Broker,留空即可 --> </beans>
3. 处理Spring对BrokerService的依赖
如果原有Spring配置里有其他bean依赖brokerService实例,你需要调整这些依赖:
- 大部分情况下,Web Console的核心功能只需要
connectionFactory和正确的JMX连接地址,所以把依赖brokerService的地方替换成connectionFactory即可。 - 要是有自定义的Spring bean依赖本地Broker,那你需要根据业务逻辑调整,比如改成依赖远程Broker的连接工厂或者JMX代理。
验证配置
启动嵌入式Tomcat后,访问Web Console页面,你应该能看到现有Broker的监控数据,而不是那个名为web-console的本地Broker了。
内容的提问来源于stack exchange,提问作者Oleg Sklyar
相关产品推荐
相关产品推荐

