【发布时间】:2021-01-08 02:13:06
【问题描述】:
我有一个 Python 和 Java Spring 应用程序以 2 种方式通信。该堆栈主要基于 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 代理是在版本5.15.12
我尝试将 amp;transport.transformer=jms 和 transport.transformer=jms 标头添加到代理 URL 的查询字符串,以及在 Python 应用程序中使用 STOMP 作为协议(因为它是纯文本协议)而不是 AMQP但这些都不起作用。
那么,您知道我可以在 Python 应用程序中发送 AMQP 消息并在 Java 应用程序中接收 JMS TextMessage 的任何潜在缺失配置或其他方式吗?
【问题讨论】:
-
如果您只是启用 AMQPS 是否有效?亚马逊的文档说他们支持 AMQPS,但公平地说,他们没有说支持多种协议。在我看来,它只是亚马逊工具中的一个错误。在裸机上安装“真正的”ActiveMQ 可能会更快;)
-
AMPQS 已经是默认设置。核心问题似乎是 AmazonMQ 不支持为
transportConnector=> docs.aws.amazon.com/amazon-mq/latest/developer-guide/… 设置这些属性。我认为 OP 正在寻找客户端解决方案,或者没有它的解决方法。 -
您找到解决此问题的方法了吗?我还看到尝试使用 Java + JMS 将字节数组从 NodeJs + AMQP lambda 发送给消费者的类似问题。
标签: jms activemq amqp amazon-mq