Camel AMQP交易问题(使用Qpid客户端)

时间:2015-06-25 22:25:28

标签: apache transactions amqp qpid

我正在尝试通过我创建的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

请你告诉我我做错了什么?

(我怀疑我连接的经纪人可能不支持交易)

1 个答案:

答案 0 :(得分:0)

我已经设法解决了这个问题(抱歉这里的帖子非常晚,答案很清楚)。我在这里找到了很多有用的知识:http://tmielke.blogspot.ro/2012/03/camel-jms-with-transactions-lessons.html

使用哪个事务管理器(JmsTransactionManager,Atomikos等)并不重要,我所要做的就是在端点上设置选项cacheLevelName = CACHE_CONSUMER。

如果您需要其他信息,可以在我发布的链接中找到所有内容。