Camel - “子路由”中的异常处理

发布于 2024-12-04 16:04:07 字数 728 浏览 1 评论 0原文

Camel 显式处理两个“范围”的错误处理:

  • 全局
  • 每个路由

我遇到的问题是在“子路由”中抛出异常。例如,我有这个路由:

from("direct:sendToWebservice").
    .processRef("massageBeforeSending").
    .to("http://webservice.com").
    .processRef("massageResponse");

然后我还有另外两个路由需要将消息发送到 Web 服务:

from(direct:fromSystemA").
    .errorHandler(deadLetterChannel("direct:TellSystemA")).
    .to("direct:sendToWebservice");

from(direct:fromSystemB").
    .errorHandler(deadLetterChannel("direct:TellSystemB")).
    .to("direct:sendToWebservice");

我希望发生的是,如果 Web 服务路由抛出异常,它会传播到调用者,并且系统 A 或系统 B 都会收到通知。我看不出有什么办法可以实现这一目标。

我觉得这将是一个常见的用例——以前有人遇到过它吗?

再次感谢您抽出时间,

罗伊

Camel explicitly handles two 'scopes' of error handling:

  • Global
  • per Route

The issue I'm having is exceptions thrown in a 'sub route'. For instance, I've got this route:

from("direct:sendToWebservice").
    .processRef("massageBeforeSending").
    .to("http://webservice.com").
    .processRef("massageResponse");

Then I've got two other routes that need to send messages to the webservice:

from(direct:fromSystemA").
    .errorHandler(deadLetterChannel("direct:TellSystemA")).
    .to("direct:sendToWebservice");

from(direct:fromSystemB").
    .errorHandler(deadLetterChannel("direct:TellSystemB")).
    .to("direct:sendToWebservice");

What I would like to happen is, if the webservice route throws an exception, it's propagated up to the caller, and either system A or system B would be notified. I don't see a way to achieve this.

I feel like this would be a common use case - has anyone bumped up against it before?

Thanks again for your time,

Roy

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

自由如风 2024-12-11 16:04:07

从同事那里得到答案:子路由需要禁用它的错误处理:

from("direct:sendToWebservice").
    .errorHandler(noErrorHandler())     // disables error handling for this route
    .processRef("massageBeforeSending").
    .to("http://webservice.com").
    .processRef("massageResponse");

这会强制 Camel 将错误传播到调用路由。

Got the answer from a colleague: The subroute needs to have it's error handling disabled:

from("direct:sendToWebservice").
    .errorHandler(noErrorHandler())     // disables error handling for this route
    .processRef("massageBeforeSending").
    .to("http://webservice.com").
    .processRef("massageResponse");

This forces Camel to propagate the error to the calling route.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文