【问题标题】:Camel AMQP transactions issue (with Qpid client)Camel AMQP 事务问题(使用 Qpid 客户端)
【发布时间】: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


【解决方案1】:

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

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

如果您需要更多信息,您可以在我在此处发布的链接中找到所有信息。

【讨论】:

    猜你喜欢
    • 2014-08-04
    • 2013-03-18
    • 2013-02-05
    • 2019-08-19
    • 2013-07-19
    • 2016-11-13
    • 2021-09-11
    • 1970-01-01
    • 2016-11-26
    相关资源
    最近更新 更多