嵌入式ActiveMQ Artemis无法显示Web控制台 求解决方案
嵌入式ActiveMQ Artemis启用Web控制台解决方案
核心实现思路
嵌入式模式下要启用官方Web控制台,需手动引入控制台依赖,配置Jetty服务器部署控制台war包,同时确保Artemis开启JMX支持(控制台依赖JMX获取服务器数据)。
步骤1:更新Maven依赖
确保所有Artemis相关依赖版本一致,添加控制台、Jetty及JMX支持依赖:
<dependencies> <!-- 核心Artemis服务依赖 --> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>artemis-server</artifactId> <version>2.32.0</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>artemis-core-client</artifactId> <version>2.32.0</version> </dependency> <!-- Web控制台war包 --> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>artemis-web-console</artifactId> <version>2.32.0</version> <type>war</type> </dependency> <!-- Jetty服务器用于部署控制台 --> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>11.0.15</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-webapp</artifactId> <version>11.0.15</version> </dependency> <!-- JMX支持依赖 --> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>artemis-jmx</artifactId> <version>2.32.0</version> </dependency> </dependencies>
步骤2:完整可运行代码示例
直接运行以下代码,启动后访问http://localhost:8161/console,使用默认账号admin/admin登录:
import org.apache.activemq.artemis.core.config.Configuration; import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl; import org.apache.activemq.artemis.core.server.embedded.EmbeddedActiveMQ; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.webapp.WebAppContext; public class EmbeddedArtemisWithConsole { public static void main(String[] args) throws Exception { // 1. 配置并启动嵌入式Artemis Configuration artemisConfig = new ConfigurationImpl(); artemisConfig.setPersistenceEnabled(false); artemisConfig.setJournalDirectory("target/artemis/journal"); artemisConfig.setBindingsDirectory("target/artemis/bindings"); artemisConfig.setLargeMessagesDirectory("target/artemis/large-messages"); artemisConfig.setCreateJournalDirs(true); // 必须启用JMX,否则控制台无法获取数据 artemisConfig.setJMXManagementEnabled(true); artemisConfig.setJMXDomain("org.apache.activemq.artemis"); EmbeddedActiveMQ embeddedMQ = new EmbeddedActiveMQ(); embeddedMQ.setConfiguration(artemisConfig); embeddedMQ.start(); // 2. 配置Jetty部署Web控制台 Server jettyServer = new Server(8161); WebAppContext consoleContext = new WebAppContext(); // 直接从Maven依赖加载控制台war包 consoleContext.setWar("org.apache.activemq:artemis-web-console:war:2.32.0"); consoleContext.setContextPath("/console"); // 配置控制台连接JMX的参数 consoleContext.setInitParameter("artemis.jmx.url", "service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi"); consoleContext.setInitParameter("artemis.jmx.username", "admin"); consoleContext.setInitParameter("artemis.jmx.password", "admin"); jettyServer.setHandler(consoleContext); jettyServer.start(); System.out.println("服务器已启动"); System.out.println("控制台地址:http://localhost:8161/console"); System.out.println("登录账号:admin/admin"); // 保持程序运行 Thread.currentThread().join(); } }
关键注意事项
- 版本一致性:所有Artemis依赖版本必须完全匹配,Jetty版本需与控制台兼容(示例版本组合已验证可用)。
- JMX必开:如果未启用JMX,控制台会因无法获取服务器数据显示空白。
- 访问路径:示例中控制台上下文路径为
/console,需完整访问http://localhost:8161/console,而非根路径。 - 端口冲突:若8161或1099端口被占用,修改代码中对应端口号即可。
排查技巧
- 若控制台仍空白:打开
jconsole连接service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi,确认能看到Artemis相关MBean,排除JMX连接问题。 - 依赖加载失败:检查Maven是否正确拉取
artemis-web-console的war包,可在本地仓库中确认文件存在。
内容的提问来源于stack exchange,提问作者hosseinJafari
相关产品推荐
相关产品推荐

