【发布时间】:2015-09-12 17:44:44
【问题描述】:
我正在尝试通过我创建的 AMQP 连接添加事务,该连接是为了从我的项目连接到外部 AMQP 代理(我无权访问)。
为了使用 SSL 连接到 AMQP 代理,我正在使用来自 Qpid 的 ConnectionFactory 实现:org.apache.qpid.amqp_1_0.jms.impl.ConnectionFactoryImpl。
我正在与以下内容建立联系:
URI:amqps://x.x.x.x:port?brokerlist='ssl://x.x.x.x:port'
主题:topic://topicName
信任库和密钥库
连接是从 Apache Camel (v2.14.1) 路由初始化的,其中 Camel AMQP 组件构建在 JMS 之上,正如 Apache Camel 的 AMQP 组件文档中所述(可在此处找到:@ 987654321@ 在“使用主题”部分)。
当我在未启用事务的情况下使用 AMQP 组件时,它工作得非常好。
另一方面,如果我通过以下方式启用交易:
提供一个事务管理器,它必须是接口
org.springframework.transaction.PlatformTransactionManager的实现org.springframework.transaction.jta.JtaTransactionManager在 Camel 端点上设置 transacted=true 配置选项
在 Camel 端点上设置 cacheLevelName=CACHE_NONE 不知何故,只有一条消息从主题中被提取,其他所有内容都丢失/忽略。
日志显示事务管理器创建成功:
DEBUG org.apache.camel.util.IntrospectionSupport: Configured property: transactionManager on bean: org.apache.camel.component.jms.JmsConfiguration@5b05bf with value: org.springframework.transaction.jta.JtaTransactionManager@1d642e2
DEBUG org.apache.camel.util.IntrospectionSupport: Configured property: cacheLevelName on bean: org.apache.camel.component.jms.JmsConfiguration@5b05bf with value: CACHE_NONE
DEBUG org.apache.camel.util.IntrospectionSupport: Configured property: concurrentConsumers on bean: org.apache.camel.component.jms.JmsConfiguration@5b05bf with value: 1
DEBUG org.apache.camel.util.IntrospectionSupport: Configured property: transacted on bean: org.apache.camel.component.jms.JmsConfiguration@5b05bf with value: true
请告诉我我做错了什么?
(我怀疑我连接的代理可能不支持交易)
【问题讨论】:
-
您连接的代理和版本是什么?
-
我正在连接一些 Qpid 代理,但我不确定版本和类型。我无权访问它,因此无法检查,但我正在等待拥有经纪人的人对这个问题的回答。收到回复后,我将在此处发布确切的代理类型及其版本。
-
代理是:Redhat A-MQ 6.1版
-
@RaGe:您能指教一下吗?
-
我只是想检查一下您的经纪人是否支持交易,确实如此。顺便说一句,您不应该使用 JMS 事务管理器
标签: apache transactions amqp qpid