Amazon MQ 将 AMQP 消息转换为 JMS

Nic*_*ard 7 activemq-classic jms amqp amazon-mq

我有一个 Python 和 Java Spring 应用程序以两种方式进行通信。该堆栈主要构建在 Java/Spring 上,因此 ActiveMQ 和 JMS 是合乎逻辑的选择。但是,我们添加了一个需要与其余服务交互的 Python 应用程序,因此我使用了 qpid proton(AMQP 库)并在 ActiveMQ 配置中添加了以下配置以使其工作:

<transportConnectors>
    <transportConnector name="openwire" uri="ssl://0.0.0.0:61617?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="amqps" uri="amqp+ssl://0.0.0.0:5671?maximumConnections=1000&wireFormat.maxFrameSize=104857600&transport.transformer=jms"/>
</transportConnectors>
Run Code Online (Sandbox Code Playgroud)

它在 ActiveMQ 上完美运行,并允许使用 AMQP 客户端发送/接收 JMS TextMessage。

不幸的是,Amazon MQ 拒绝了此配置并返回了以下错误:

元素“transportConnector”上属性“name”的值“amqp+ssl”就其类型“protocol”而言无效。和 cvc-enumeration-valid:值 'amqps' 对于枚举 '[openwire]' 不是方面有效的

AWS 将 Amazon MQ 作为托管 ActiveMQ 服务进行营销,但它们似乎缺乏功能,因为从 5.8 版开始就可以使用从 AMQP 到 JMS 的映射:https : //activemq.apache.org/amqp和我的 Amazon MQ 代理m 使用的是版本 5.15.12

我尝试将amp;transport.transformer=jmstransport.transformer=jms标头添加到代理 URL 的查询字符串中,并在 Python 应用程序中使用 STOMP 作为协议(因为它是纯文本协议)而不是 AMQP,但这些都不起作用。

那么,您知道我可以在 Python 应用程序中发送 AMQP 消息并在 Java 应用程序中接收 JMS TextMessage 的任何潜在丢失配置或其他方式吗?

Tim*_*ish 0

默认情况下,在开源 ActiveMQ 5.x 代码中,AMQP 传输已默认为 JMS 转换,因此除非 Amazon 版本已更改,否则如果您希望入站 AMQP 消息进行 JMS 转换,则无需显式设置。如果他们对此进行了更改,那么您需要联系他们以确定如何更改该配置。

  • 在这种情况下,我建议尝试 ActiveMQ Artemis,它实现了更加完善的 AMQP 协议栈并得到积极维护。 (2认同)