在Apache Camel路由中使用JMS是否可以保证交付?

时间:2016-11-08 23:43:46

标签: java apache-camel jms

根据Apache Camel documentation," Camel支持EIP模式的保证交付使用以下组件:... JMS。"

我试图理解这是否意味着我可以在多组件路线中使用JMS来保证交付。"

例如,我有一些看起来像这样的路线:

from("rest://post:someRestRoute")
    // blah blah
    .to("jms:queue:someQueue");

from("jms:queue:someQueue")
    // blah blah
    .to("spring-ws:someAddress")
    .to("someOtherRoute");

在多组件路线中间使用JMS有什么好处吗? Camel正在向队列写入和读取,并且队列在同一台计算机和同一个JVM上运行,因此Camel只保证自己的传输,这似乎是多余的。

例如,

  1. 邮件已发布到someRestRoute
  2. 邮件已排队并保留在someQueue
  3. 邮件立即出列。
  4. 邮件将发送到someAddress
  5. 的网络服务

    据我了解,就JMS经纪人而言,消息已经传送到#34;它成功出故的那一刻;如果spring-ws:someAddress抛出异常并不重要。我想如果Camel在第2步之后立即崩溃 ,这可能会有所帮助,但我希望保证能够交付someAddress

    在多组件路线中间使用JMS有什么好处吗?它可以用于"保证交付"在示例中为someAddress

1 个答案:

答案 0 :(得分:2)

仅当您的JMS队列被定义为持久消息时。然后,如果您的路由/应用程序/服务器在选择消息之前停止,它将在队列中,直到下次路由开始时处理。 如果您不需要持久性,则没有理由拥有JMS。 可以将Camel设置为在发生故障时重试传递到端点。

但是,如果你需要持久性,JMS是最好的(如果不是只有一种)方法。