ActiveMQ Classic迁移Artemis:HTTP传输连接配置问题
解决ActiveMQ Artemis 2.28.0 HTTP连接兼容ActiveMQ Classic的问题
你遇到的核心问题是混淆了ActiveMQ Classic与Artemis的HTTP传输配置逻辑,以及错误使用了Artemis不支持的http:// URI schema。以下是具体解决方案:
1. 修正Broker端Acceptor配置
Artemis没有直接的http://类型连接器/接收器,它通过TCP接收器启用HTTP封装来兼容Classic的HTTP传输(OpenWire over HTTP)。在broker.xml中修改<acceptors>节点(注意:<connectors>是Broker用于连接其他Broker的配置,接收客户端连接需用<acceptors>):
<acceptors> <!-- 保留原有TCP acceptor --> <acceptor name="artemis">tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;amqpMinLargeMessageSize=102400;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpDuplicateDetection=true</acceptor> <!-- 添加HTTP兼容的OpenWire接收器 --> <acceptor name="http-openwire-acceptor">tcp://0.0.0.0:8080?httpEnabled=true&protocols=OPENWIRE</acceptor> </acceptors>
关键参数说明:
httpEnabled=true:开启TCP连接的HTTP封装模式,允许客户端通过HTTP协议发送OpenWire帧protocols=OPENWIRE:明确指定该接收器只处理OpenWire协议(匹配Classic客户端的协议)- 端口使用8080(对应你需要的DNS切换地址)
2. 为什么之前的配置报错
Artemis的接收器/连接器URI仅支持tcp://、vm://、udp://等原生schema,直接使用http://会触发Schema http not found错误,必须通过TCP接收器+httpEnabled参数实现HTTP传输兼容。
3. 客户端兼容性验证
原有Classic客户端无需修改任何配置,直接使用http://broker:8080连接即可——Artemis的HTTP封装接收器会自动处理HTTP请求中的OpenWire帧,与Classic的HTTP传输逻辑完全兼容,DNS切换后不会影响现有消费者。
4. 排障要点
- 确保8080端口未被其他服务占用
- 检查Broker启动日志,确认
http-openwire-acceptor正常初始化 - 如果客户端连接超时,可添加
httpClientIdleTimeout参数调整HTTP连接超时时间,例如:tcp://0.0.0.0:8080?httpEnabled=true&protocols=OPENWIRE&httpClientIdleTimeout=30000
内容的提问来源于stack exchange,提问作者Alexandre Carriconde
相关产品推荐
相关产品推荐

