提问者:小点点

骆驼AMQP事务问题(使用Qpid客户端)


我正在尝试通过我为从我的项目连接到外部AMQP代理(我无权访问)而创建的AMQP连接添加事务。

为了使用SSL连接到AMQP代理,我使用Qpid中的ConnectionFactory实现:org. apache.qpid.amqp_1_0.jms.iml.ConnectionFactoryImpl

我正在连接下面的东西:

>

  • URI: amqps://x.x.x.x:port?broklist='ssl://x.x.x:port'

    topic: topic://topicName

    一个信任库和一个密钥库

    连接从Apache Camel(v2.14.1)路由初始化,Camel AMQP组件构建在JMS之上,与Apache Camel的AMQP组件留档中所述完全相同(可以在此处找到:http://camel.apache.org/amqp.html在“使用主题”部分)。

    当我在不启用事务的情况下使用AMQP组件时,它工作得非常好。

    另一方面,如果我通过以下方式启用交易:

    >

  • 提供一个事务管理器,它必须是接口org. springframe.transaction.PlatformTransactionManager作为org.springframe.transaction.jta.JtaTransactionManager的实现

    在Camelendpoint上设置transact=true配置选项

    设置cacheLevelName=CACHE_NONE在Camelendpoint上,不知何故,只有一个消息从主题中被拾取,其他所有内容都丢失/忽略。

    日志显示事务管理器已成功创建:

    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个答案

    匿名用户

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

    无论您使用哪个事务管理器(JmsTransactionManager、Analyikos等),我所要做的就是在endpoint上设置选项cacheLevelName=CACHE_CONSUMER。

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