我正在将我的应用程序升级到 Mule 4.7 以启用 Java 17 兼容性。在此设置中,我使用 JMS 连接器版本 1.9.6 连接到 ActiveMQ Classic。我的 ActiveMQ Classic 依赖项包括 activemq-all 和 activemq-client,版本均为 5.18.5。
当我尝试部署应用程序时,遇到以下错误:
Caused by: javax.jms.JMSException: Could not create Transport. Reason: java.io.IOException: Invalid location: failover:(ssl://amq.org:61617)?maxReconnectAttempts=-1?socket.verifyHostName=false)
似乎
?socket.verifyHostname
会自动附加到连接字符串的末尾,导致出现 ?
而不是 &
,这可能会导致问题。
下面是我正在使用的连接配置的最小设置,以及重现错误的步骤。
<jms:config name="ActivemqConnection" doc:name="JMS Config" doc:id="5perf46a-8b92-4c97-c980-37cda733f4b8" >
<jms:active-mq-connection username="${username}" password="${password}" tlsContext="Config">
<jms:xa-connection-pool minPoolSize="1" />
<jms:factory-configuration brokerUrl="${broker.url}" />
</jms:active-mq-connection>
<jms:consumer-config >
<jms:consumer-type >
<jms:topic-consumer />
</jms:consumer-type>
</jms:consumer-config>
</jms:config>
broker.url=failover:(ssl://amq.org:61617)?maxReconnectAttempts=-1
在 Mule 4.7 项目中设置上述连接配置。
使用设置为 5.18.5 的
activemq-all
和 activemq-client
版本。
使用 Java 17 在 Mule 4.7 中部署项目。
预期结果:连接字符串应正确运行,无需修改即可连接到 ActiveMQ。
实际结果:自动附加参数
?socket.verifyHostname
,导致以下错误:
我尝试了
activemq-client
和 activemq-all
库版本的各种组合来解决此问题,但问题仍然存在。我正在寻找有关正确使用版本的指导或防止自动附加 ?socket.verifyHostname
的方法。
此版本的 JMS 连接器可能无法识别 URL 中已使用的参数。您可以尝试使用连接器中的重新连接策略替换 URL 中的 maxReconnectAttempts。