根据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只保证自己的传输,这似乎是多余的。
例如,
someRestRoute
。someQueue
。someAddress
。据我了解,就JMS经纪人而言,消息已经传送到#34;它成功出故的那一刻;如果spring-ws:someAddress
抛出异常并不重要。我想如果Camel在第2步之后立即崩溃 ,这可能会有所帮助,但我希望保证能够交付someAddress
。
在多组件路线中间使用JMS有什么好处吗?它可以用于"保证交付"在示例中为someAddress
?
答案 0 :(得分:2)
仅当您的JMS队列被定义为持久消息时。然后,如果您的路由/应用程序/服务器在选择消息之前停止,它将在队列中,直到下次路由开始时处理。 如果您不需要持久性,则没有理由拥有JMS。 可以将Camel设置为在发生故障时重试传递到端点。
但是,如果你需要持久性,JMS是最好的(如果不是只有一种)方法。