gpt4 book ai didi

java - 在 Apache Camel 路由中间使用 JMS 是否保证交付?

转载 作者:行者123 更新时间:2023-11-30 08:31:45 26 4
gpt4 key购买 nike

根据 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 的网络服务。

据我了解,就 JMS 代理而言,消息在成功出队时即被“传送”; spring-ws:someAddress 是否抛出异常并不重要。我想如果 Camel 在第 2 步之后立即 崩溃,这可能会有所帮助,但我希望保证交付到 someAddress

在多组件路由中间使用 JMS 有什么好处吗?它可以用于“保证交付”到示例中的 someAddress 吗?

最佳答案

仅当您的 JMS 队列被定义为保留消息时。然后,如果您的路由/应用程序/服务器在选择消息之前停止,它将在队列中,直到路由启动时下一次处理。如果您不需要持久性,那么就没有理由拥有 JMS。Camel 可以设置为在失败的情况下重试传递到端点。

但是,如果您需要持久性,JMS 是最好的(如果不是唯一的)方法。

关于java - 在 Apache Camel 路由中间使用 JMS 是否保证交付?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40498303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com