1

我的路线定义为

from("jetty:http://0.0.0.0:xxxx/abc").to("activemq:queue:queue1").setExchangePattern(ExchangePattern.InOnly);

我了解此路由将消息发送到代理,并且不会等待消息使用者使用它。我想了解 ExchangePattern.InOnly 对代理接受消息的影响。我在代理上启用了持久性。上面的路由是否保证在交换完成之前持久化。

4

1 回答 1

3

您需要在发送到 JMS 队列之前设置 MEP。另一种方法是告诉在发送到队列时只使用 InOnly。所以你可以做

from("jetty:http://0.0.0.0:xxxx/abc")
  .setExchangePattern(ExchangePattern.InOnly)
  .to("activemq:queue:queue1");

或者

from("jetty:http://0.0.0.0:xxxx/abc")
  .to(ExchangePattern.InOnly, "activemq:queue:queue1");

您可以在 Camel 网站上查看有关事件和请求-回复消息 EIP 的更多详细信息

是的,如果您在代理上启用了持久性,那么它将在接收到消息时将消息存储在持久性存储中,并且在代理向发送方(在本例中为 Camel)发回 ACK 之前。Camel 发送到 broker 后会继续路由,到达路由的终点,并返回响应给 Jetty。您可以考虑设置一些空响应来使用,例如:

from("jetty:http://0.0.0.0:xxxx/abc")
  .to(ExchangePattern.InOnly, "activemq:queue:queue1")
  .transform().constant("OK");
于 2013-02-27T07:18:29.733 回答