Apache camel 如何在多个Apache Camel路由中包含常见行为?

Apache camel 如何在多个Apache Camel路由中包含常见行为?,apache-camel,spring-camel,Apache Camel,Spring Camel,我正在Spring Boot 1.5.8应用程序中使用Camel 2.19.2。例如,如果我想让我的多条路线具有“状态感知”,我该如何实现这一点?我所说的“状态感知”是指路由将启动,通知组件工作流已启动,然后它将执行特定于路由的逻辑,完成后,它将通知组件工作流已完成。如果可能的话,我希望这会自动发生,而不必调用我希望使用此功能的每个路由生成器中的特定逻辑 下面是一个代码示例,与我的意思类似: public class FooRouteBuilder extends StatusAwareRout

我正在Spring Boot 1.5.8应用程序中使用Camel 2.19.2。例如,如果我想让我的多条路线具有“状态感知”,我该如何实现这一点?我所说的“状态感知”是指路由将启动,通知组件工作流已启动,然后它将执行特定于路由的逻辑,完成后,它将通知组件工作流已完成。如果可能的话,我希望这会自动发生,而不必调用我希望使用此功能的每个路由生成器中的特定逻辑

下面是一个代码示例,与我的意思类似:

public class FooRouteBuilder extends StatusAwareRouteBuilder {
    @Override
    public void configure() {
        // Here I want to have this route know how to notify something
        // that this processing has begun, but I do not want to have
        // to explicitly call a processor to make it happen, but it
        // should know what to do by virtue of extending a custom
        // route builder, if appropriate, or by some other/better
        // mechanism

        // Now conduct any route-specific logic
        from("vm:myAction")
            .process("myProcessor");

        // Now handle the status notification that this is finished...
        // Here I want to have this route know how to notify something
        // that this processing has finished
    }
}

从概念上讲,这几乎类似于AOP,因此我希望能够在一个地方定义此行为,并将其包含在需要使用此行为的一些路由中。有什么办法可以做到这一点吗?我看到有关于测试的adviceWith,但我需要它来进行常规操作。提前感谢。

我认为RoutePolicy和RoutePolicyFactory可以作为答案,也就是说,当路由或交换开始/停止时,您可以调用回调

有关更多信息,请参见《也许可以帮助您》。这些通常是应用于所有或大部分路由的小型通用路由

例如,在每条路线上进行安全检查。对于拦截器,您只需编写一次,它就会应用于所有路由,甚至是添加的新路由

有三种味道

  • 拦截
    在路由时拦截每个处理步骤 路线上的交换
  • interceptFrom
    拦截每个传入的 路由中的交换(开始处理)
  • interceptSendToEndpoint
    在 Exchange即将被发送到终结点
拦截器可以配置为仅针对特定端点类型或根据其他特定条件“发射”


还有一种方法是在路线完成时做类似的事情。无论是成功完成还是失败完成(默认)。

我需要在每次调用路由时(当消息传递给它时)都发生这种情况,而不仅仅是在路由开始/停止时。因此,看看OneXchangeBeagin/OneXchangedOn这个解决方案吧,我很感兴趣,但我只希望拦截发生在指定的路由上,并且仅在路线开始时,然后在路线完成时(无论正常完成或异常情况)。我无法从那个文档中看出这是否可能。我已经扩展了我的答案。路由的开始:
拦截自
;路线完成:
onCompletion
。仅某些路由:使用谓词定义应用拦截器的路由。