我正在尝试创建一个路由器来集成许多JMS主题&队列。我受到以下事实的限制:我工作的客户端无法更改JMS (带有一些自定义客户端库),以及它们编写了自己的XA事务管理器,这与JTA不太一致。保证消息传递是非常重要的。
我对Camel做了大量的阅读和实验,我意识到我可能需要编写自己的JMS组件,因为标准JMS组件不会与JMS客户机库或TM集成。
我需要能够在以下几点将钩子放入路由生命周期:
鉴于以上所述,我认为我可以实现camel-jms组件的一个非常简化的版本,它去掉了所有Spring部件,并且只包含与JMS库交互所需的最低限度。
初始化事务管理器的最佳地点是哪里?我一直在查看DefaultCamelContext、RoutePolicy和RouteContext,但是我找不到所有端点都被解析和初始化的地方。
发布于 2016-04-30 12:59:50
我通过实现UserTransaction和TransactionManager接口以及创建Camel JMS组件用来创建DefaultMessageListenerContainer的PlatformTransactionManager来解决这个问题。
需要注意的一点是,Camel JMSComponent上的JMSComponent属性指的是本地事务,而不是XA事务。如果在将PlatformTransactionManager传递给组件后将此属性设置为true,则DMLC将有效地尝试两次提交事务,这将无法工作。
这给我留下了一个从一个JMS代理到另一个JMS代理的很好的工作示例,但是它非常慢--每秒5条消息。不幸的是,Spring不支持批处理,因此这里的最佳解决方案似乎是调整JMS主题配置,使路由只在同一代理上的主题之间进行。
https://stackoverflow.com/questions/35564810
复制相似问题