ActiveMQ 设置用户名密码及开启用户认证
ActiveMQ 默认是不启用认证的
但项目实施是必须需要用户名密码验证的,所以下面写下如果配置ActiveMQ用户名密码和开启认证
第一步、编辑ActiveMQ的登录配置文件
/opt/activemq/conf/jetty-realm.properties #或 /opt/activemq/conf/users.properties
这里表示 用户名:admin 密码: password123
这个配置修改后需要重启ActiveMQ ,再用网页登陆则需要输入这个用户名密码了。
第二步、配置ActiveMQ的认证插件
编辑ActiveMQ配置文件 activemq.xml
在<broker>标签内添加或修改认证插件配置:
<plugins> <simpleAuthenticationPlugin> <users> <authenticationUser username="admin" password="password123" groups="admins,publishers,consumers"/> </users> </simpleAuthenticationPlugin> </plugins>
第三步、重启ActiveMQ服务使更改生效
sudo systemctl daemon-reload # 强制重载systemd配置 sudo systemctl restart activemq #重启服务
查看 ActiveMQ 运行状态
sudo systemctl status activemq
第四步、调整 Java 代码
就改这一句即可
下面是完整代码
JmsPoolUtil.java
package com.JoinCallCCActiveMQToDM.ActiveMQ; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.jms.pool.PooledConnectionFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.jms.*; public class JmsPoolUtil { protected static final Logger logger = LoggerFactory.getLogger(JmsPoolUtil.class); private static PooledConnectionFactory pooledConnectionFactory; //final //private static final String BROKER_URL = "tcp://192.168.1.145:61616"; private static String brokerUrl; // 移除了final // 初始化方法 public static void init(String url) { logger.info("ActiveMQ JmsPoolUtil 初始化 " + url); brokerUrl = url; // 1. 创建 ActiveMQ 原生连接工厂 //ActiveMQConnectionFactory activeMQFactory = new ActiveMQConnectionFactory(brokerUrl); ActiveMQConnectionFactory activeMQFactory = new ActiveMQConnectionFactory("admin", "password123", brokerUrl); // 2. 配置连接池 pooledConnectionFactory = new PooledConnectionFactory(); pooledConnectionFactory.setConnectionFactory(activeMQFactory); pooledConnectionFactory.setMaxConnections(10); // 最大连接数 pooledConnectionFactory.setMaximumActiveSessionPerConnection(50); // 每个连接最大会话数 pooledConnectionFactory.setIdleTimeout(30_000); // 空闲超时(毫秒) pooledConnectionFactory.setBlockIfSessionPoolIsFull(true); // 会话池满时阻塞 } public static Connection getConnection() throws JMSException { return pooledConnectionFactory.createConnection(); } public static void shutdown() { pooledConnectionFactory.stop(); } }
如果连接出错
Error while attempting to add new Connection to the pool
检查 麒麟系统防火墙是否关闭或端口是否开放
检查命令:
sudo firewall-cmd --list-ports | grep 8161
放行 8161 和 61616 端口:
8161 端口 网页管理端使用
61616 端口 java程序连接使用
sudo firewall-cmd --add-port=8161/tcp --permanent #放行8161端口 sudo firewall-cmd --add-port=61616/tcp --permanent #放行61616端口 sudo firewall-cmd --reload #重新加载防火墙