首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将自己的XA事务管理器与Apache集成?

如何将自己的XA事务管理器与Apache集成?
EN

Stack Overflow用户
提问于 2016-02-22 22:01:07
回答 1查看 317关注 0票数 2

我正在尝试创建一个路由器来集成许多JMS主题&队列。我受到以下事实的限制:我工作的客户端无法更改JMS (带有一些自定义客户端库),以及它们编写了自己的XA事务管理器,这与JTA不太一致。保证消息传递是非常重要的。

我对Camel做了大量的阅读和实验,我意识到我可能需要编写自己的JMS组件,因为标准JMS组件不会与JMS客户机库或TM集成。

我需要能够在以下几点将钩子放入路由生命周期:

  • 在路由启动期间,我需要识别所有JMS连接,并将它们作为XA资源登记到TM实现中。
  • 当消费者收到消息时,我需要启动一个事务,包括路由中的所有JMS连接
  • 当作出路由决定时,我需要将消息发送给生产者并提交事务。

鉴于以上所述,我认为我可以实现camel-jms组件的一个非常简化的版本,它去掉了所有Spring部件,并且只包含与JMS库交互所需的最低限度。

初始化事务管理器的最佳地点是哪里?我一直在查看DefaultCamelContext、RoutePolicy和RouteContext,但是我找不到所有端点都被解析和初始化的地方。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-30 12:59:50

我通过实现UserTransactionTransactionManager接口以及创建Camel JMS组件用来创建DefaultMessageListenerContainerPlatformTransactionManager来解决这个问题。

需要注意的一点是,Camel JMSComponent上的JMSComponent属性指的是本地事务,而不是XA事务。如果在将PlatformTransactionManager传递给组件后将此属性设置为true,则DMLC将有效地尝试两次提交事务,这将无法工作。

这给我留下了一个从一个JMS代理到另一个JMS代理的很好的工作示例,但是它非常慢--每秒5条消息。不幸的是,Spring不支持批处理,因此这里的最佳解决方案似乎是调整JMS主题配置,使路由只在同一代理上的主题之间进行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35564810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档