7

我有一个 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>

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

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

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

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

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

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

4

1 回答 1

0

默认情况下,在开源 ActiveMQ 5.x 代码中,AMQP 传输已经默认为 JMS 转换,因此除非 Amazon 版本已更改,否则如果您想要入站 AMQP 消息的 JMS 转换,您甚至不需要明确设置。如果他们已更改,那么您需要联系他们以确定如何更改该配置。

于 2020-09-22T18:31:55.490 回答