ActiveMQ Artemis Docker部署与Spring Boot连接认证问题求助
解决ActiveMQ Artemis Docker容器认证及SSL相关问题
核心问题分析
你遇到的错误根源有两个:
- Docker容器启动时未显式创建
admin用户,导致Broker中不存在该用户,触发User does not exist: admin错误 - 自定义Spring Boot配置存在冗余,可能导致凭证未正确生效
步骤1:重新启动Docker容器,创建指定用户
停止现有容器,用以下命令启动,明确指定用户名和密码(替换your_secure_password为实际密码):
docker run -d \ --name artemis-broker \ -p 61616:61616 \ # 普通JMS连接端口 -p 8161:8161 \ # Web控制台端口 -e ARTEMIS_USERNAME=admin \ -e ARTEMIS_PASSWORD=your_secure_password \ apache/activemq-artemis:latest
该命令会自动在Broker的用户配置文件中添加admin账号,并赋予管理员权限。
步骤2:简化Spring Boot配置,避免冲突
Spring Boot已内置Artemis自动配置,无需手动创建ConnectionFactory和JmsTemplateBean,删除自定义的MessagingConfig类,仅保留application.properties配置:
# Artemis连接配置 spring.artemis.broker-url=tcp://localhost:61616 spring.artemis.user=admin spring.artemis.password=your_secure_password # 可选:设置默认发送队列 spring.jms.template.default-destination=artemis1
若需手动注册队列Bean,可单独创建轻量配置类:
@Configuration public class QueueConfig { @Bean public ActiveMQQueue sampleQueue() { return new org.apache.activemq.artemis.jms.client.ActiveMQQueue("artemis1"); } }
步骤3:验证控制台登录
访问http://localhost:8161,使用设置的admin/your_secure_password登录,即可正常进入Web控制台。
步骤4:测试消息发送
创建消息发送类验证连接:
@Service public class MessageSender { private final JmsTemplate jmsTemplate; public MessageSender(JmsTemplate jmsTemplate) { this.jmsTemplate = jmsTemplate; } public void sendMessage(String content) { jmsTemplate.convertAndSend("artemis1", content); } }
调用该方法发送消息,即可正常完成队列交互。
额外处理:彻底关闭SSL强制认证(若仍有SSL错误)
如果仍出现SSL相关错误,可通过自定义broker.xml关闭SSL要求:
- 从运行中的容器复制默认配置:
docker cp artemis-broker:/var/lib/artemis/etc/broker.xml ./broker.xml
- 编辑
broker.xml,确保TCP acceptor的sslEnabled=false(默认已关闭,若被修改则修正):
<acceptor name="artemis">tcp://0.0.0.0:61616?sslEnabled=false;tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;amqpMinLargeMessageSize=102400;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpDuplicateDetection=true</acceptor>
- 挂载自定义配置重启容器:
docker run -d \ --name artemis-broker \ -p 61616:61616 \ -p 8161:8161 \ -e ARTEMIS_USERNAME=admin \ -e ARTEMIS_PASSWORD=your_secure_password \ -v $(pwd)/broker.xml:/var/lib/artemis/etc/broker.xml \ apache/activemq-artemis:latest
内容的提问来源于stack exchange,提问作者Tara
相关产品推荐
相关产品推荐

