ActiveMQ 设置用户名密码及开启用户认证

ActiveMQ 默认是不启用认证的

但项目实施是必须需要用户名密码验证的,所以下面写下如果配置ActiveMQ用户名密码和开启认证

第一步、编辑ActiveMQ的登录配置文件

/opt/activemq/conf/jetty-realm.properties
#
/opt/activemq/conf/users.properties

image

image

这里表示  用户名:admin   密码: password123

这个配置修改后需要重启ActiveMQ  ,再用网页登陆则需要输入这个用户名密码了。

第二步、配置ActiveMQ的认证插件

编辑ActiveMQ配置文件  activemq.xml

image

image

在<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   #重启服务

image

 查看 ActiveMQ 运行状态

sudo systemctl status activemq

image

 第四步、调整 Java 代码 

image

就改这一句即可

下面是完整代码

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    #重新加载防火墙

image

image

 

posted @ 2025-08-11 16:34  海乐学习  阅读(40)  评论(0)    收藏  举报