我正在尝试创建一个路由器来集成许多 JMS 主题和队列。我受制于我正在工作的客户无法更改 JMS 实现(带有一些自定义客户端库的 TibCo EMS)以及他们编写了自己的 XA 事务管理器但不太符合 JTA 规范的事实. 保证消息传递非常重要。
我对 Camel 进行了大量阅读和试验,我意识到我可能需要编写自己的 JMS 组件,因为标准 JMS 组件不会与我拥有的 JMS 客户端库或 TM 集成。
我需要能够在以下几点将钩子放入路由生命周期:
在路由启动期间,我需要识别所有 JMS 连接并将它们作为 XA 资源与 TM 实现一起使用
当消费者收到消息时,我需要启动一个事务,包括路由中的所有 JMS 连接
当做出路由决定时,我需要将消息发送给生产者并提交事务
鉴于上述情况,我认为我可以实现一个非常简化的 camel-jms 组件版本,它去掉了所有 Spring 部分,只包含与我的 JMS 库交互所需的最低限度。
初始化事务管理器的最佳位置在哪里?我一直在查看 DefaultCamelContext、RoutePolicy 和 RouteContext,但我找不到所有端点都被解析和初始化的地方。