TomEE: JMS Provider - ActiveMQ with AMQP Wire 协议

我正在尝试配置 TomEE(带有 Java EE 的 Tomcat)以使用 AMQP 有线协议连接到外部代理(Azure 服务总线)。看起来默认情况下 JMS 提供程序是 ActiveMQ。根据文档,ActiveMQ 确实支持 AMQP 协议。我的目标是使用 ActiveMQ 作为 TomEE 提供的 JMS 提供程序。但是,当我部署我的基本 ear 文件时,出现以下错误:


03-Jun-2019 16:43:19.629 WARNING [http-nio-8080-exec-1] org.apache.geronimo.transaction.manager.TransactionImpl.enlistResource Unable to enlist XAResource org.apache.geronimo.transaction.manager.WrapperNamedXAResource@117d2011, errorCode: -7

 javax.transaction.xa.XAException: Disposed due to prior exception

    at org.apache.activemq.TransactionContext.toXAException(TransactionContext.java:803)

    at org.apache.activemq.TransactionContext.setXid(TransactionContext.java:729)

    at org.apache.activemq.TransactionContext.start(TransactionContext.java:379)

    at org.apache.activemq.ra.LocalAndXATransaction.start(LocalAndXATransaction.java:151)

    at org.apache.geronimo.transaction.manager.WrapperNamedXAResource.start(WrapperNamedXAResource.java:111)

    at org.apache.geronimo.transaction.manager.TransactionImpl.enlistResource(TransactionImpl.java:209)

    at org.apache.geronimo.connector.outbound.TransactionEnlistingInterceptor.getConnection(TransactionEnlistingInterceptor.java:60)

    at org.apache.geronimo.connector.outbound.TransactionCachingInterceptor.getConnection(TransactionCachingInterceptor.java:101)

    at org.apache.geronimo.connector.outbound.ConnectionHandleInterceptor.getConnection(ConnectionHandleInterceptor.java:43)

[....]


有没有人将 ActiveMQ 与 AMQP 一起使用?或者为了奖励积分,有人让它与 Azure 服务总线一起工作吗?


我确实从 github 尝试了 Azure JMS 快速启动:(https://github.com/Azure/azure-service-bus/tree/master/samples/Java/qpid-jms-client/JmsQueueQuickstart)并且它正在工作,所以我确信服务总线已启动并正在运行。但是,我无法在 TomEE 中部署 JMS 应用程序。任何帮助将不胜感激。


更新:我正在使用 Justin Bertram 建议的 AMPQ 资源适配器:https ://github.com/amqphub/amqp-10-resource-adapter


慕容708150
浏览 141回答 1
1回答

浮云间

我认为你混淆了经纪人和客户。我已经将 ActiveMQ 与 AMQP 一起使用,但它是一个连接到 ActiveMQ 代理的 AMQP 客户端。您正在尝试使用 ActiveMQ JCA 资源适配器,它旨在通过 OpenWire 协议与 ActiveMQ 代理对话,以使用 AMQP 连接到 Azure 服务总线。这是行不通的,而且从来没有设计成可以工作。您需要使用可以使用 AMQP 的 JCA 资源适配器(即不是 ActiveMQ JCA RA)。也许看看这个通用的 JMS JCA 资源适配器。它被设计用于 JBoss AS 或 Wildfly,但不应该有任何东西妨碍它在 TomEE 中的使用。然后,您可以将Qpid JMS作为客户端插入其中。您可以在此处查看执行此操作的另一个组件的示例。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java