我的目标是构建一个交易骆驼路线,涉及:
JMS->DB->KafkaProducer
KafkaConsumer->DB->JMS
从相关的JIRA和Camel文档中,我可以看到Camel 3.17.0提供了对Kafka消费者和生产者的事务支持
所以,我测试了如下的路线,令我惊讶的是,我发现交易部分按预期工作。
from(JMS:queue1)
//transaction policy doesn't include Kafka Txn manager
.transacted("custom_policy_with_JMS_&_DB_Txn_Managers)
.to(DB:url)
.to(Kafka:topic) // Kafka endpoint is transaction enabled
.end()
我无法完全理解这在后台是如何工作的。 这种方法是否正确,因为除了添加几个属性以使其具有事务性之外,我没有专门为 Kafka 做任何事情。
我的问题是:
即使我没有在链式事务策略中包含 Kafka 事务管理器(仅包含 JMS 和 DB Txn 管理器),事务处理也没有任何问题。这是预期的用法吗?
如果支持 XA 的其余事务处理资源(JMS 和 DB)会怎样? Kafka 的提交和回滚是否仍然与它们协同工作?
我看到这种支持仅适用于 Kafka 生产者,我如何才能为消费者实现相同的交易保证?我看不到任何启用消费者交易的选项。我仍然应该通过手动提交和回滚来处理它还是有更好的方法?