Java 在ApacheCamel中使用JMS路由时,事务客户端和Transaction=true之间有什么区别?

Java 在ApacheCamel中使用JMS路由时,事务客户端和Transaction=true之间有什么区别?,java,transactions,apache-camel,jms,Java,Transactions,Apache Camel,Jms,我有一个驼峰路由,其中从和到端点是jms。 我也有错误处理 现在,我想用jms事务处理程序来保护这个消息处理。为此,我有两个选择: 如图所示,配置要使用的路由 或者只需将JMS端点配置为使用transact=true,如图所示 两者之间有什么区别?有人能告诉我哪一个更好,使用哪一个吗?根据(参见Claus Ibsen的回答)确保Camel处理在TX上下文中运行。其中,TX上下文仅用于代理(并且仅在来自同一JMS会话的同一工作单元内)。而transact=true支持消息的事务性消费。这里还有一个

我有一个驼峰路由,其中从和到端点是jms。 我也有错误处理

现在,我想用jms事务处理程序来保护这个消息处理。为此,我有两个选择:

  • 如图所示,配置要使用的路由
  • 或者只需将JMS端点配置为使用
    transact=true
    ,如图所示
  • 两者之间有什么区别?有人能告诉我哪一个更好,使用哪一个吗?

    根据(参见Claus Ibsen的回答)
    确保Camel处理在TX上下文中运行。其中,TX上下文仅用于代理(并且仅在来自同一JMS会话的同一工作单元内)。而
    transact=true
    支持消息的事务性消费。这里还有一个示例,说明您实际希望在哪里使用
    (从http端点消费):


    因此,如果您只是在同一个代理上将消息从一个JMS端点传递到另一个JMS端点,看起来您实际上并不需要事务处理的路由。

    只需补充一点说明-如果您将路由标记为
    事务处理
    ,则事务将包装您在路由中使用的所有其他事务资源-例如,您可以执行的任何数据库写入。如果使用
    transact=true
    ,则事务将仅包装该单一端点的JMS组件。
    from jetty:http
    transacted
    to jms
    to file