我正在尝试通过我创建的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组件文档中所述(可在此处找到:{ {3}}在"使用主题")。
当我在没有启用事务的情况下使用它时,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
请你告诉我我做错了什么?
(我怀疑我连接的经纪人可能不支持交易)
答案 0 :(得分:0)
我已经设法解决了这个问题(抱歉这里的帖子非常晚,答案很清楚)。我在这里找到了很多有用的知识:http://tmielke.blogspot.ro/2012/03/camel-jms-with-transactions-lessons.html
使用哪个事务管理器(JmsTransactionManager,Atomikos等)并不重要,我所要做的就是在端点上设置选项cacheLevelName = CACHE_CONSUMER。
如果您需要其他信息,可以在我发布的链接中找到所有内容。