如何在多个 Apache Camel 路由中包含常见行为?
How can I include common behavior in several Apache Camel routes?
我在 Spring Boot 1.5.8 应用程序中使用 Camel 2.19.2。例如,如果我想让我的几条路线成为 "status aware",我该如何实现? "status aware" 的意思是路由会启动,通知一个组件工作流已经开始,然后它会执行特定于路由的逻辑,当它完成时,它会通知一个组件工作流已经完成.如果可能的话,我希望这会自动发生,而不必在我想使用此功能的每个路由构建器中调用特定逻辑。
这里是一个代码示例,就像我的意思:
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 可能是答案,即您可以在路由或交换时调用回调 start/stop。
有关详细信息,请参阅 http://camel.apache.org/routepolicy.html
也许Camel interceptors可以帮到你。这些通常是小型 通用路线,适用于您的全部或大部分路线 。
例如对每条路线进行安全检查。使用拦截器,只需编写一次,它就会应用于所有路由,甚至是添加的新路由。
共有三种口味。
intercept
在路由时拦截每个处理步骤
路由中的交换。
interceptFrom
拦截每一个传入
路由交换(处理开始)
interceptSendToEndpoint
当一个
Exchange 即将发送到端点。
拦截器可以配置为 "fire" 仅针对特定端点类型或 Camel predicate 在其他特定条件下。
还有onCompletion
feature到在路由完成时做类似的事情。成功完成失败完成或两者都完成(默认)。
我在 Spring Boot 1.5.8 应用程序中使用 Camel 2.19.2。例如,如果我想让我的几条路线成为 "status aware",我该如何实现? "status aware" 的意思是路由会启动,通知一个组件工作流已经开始,然后它会执行特定于路由的逻辑,当它完成时,它会通知一个组件工作流已经完成.如果可能的话,我希望这会自动发生,而不必在我想使用此功能的每个路由构建器中调用特定逻辑。
这里是一个代码示例,就像我的意思:
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 可能是答案,即您可以在路由或交换时调用回调 start/stop。
有关详细信息,请参阅 http://camel.apache.org/routepolicy.html
也许Camel interceptors可以帮到你。这些通常是小型 通用路线,适用于您的全部或大部分路线 。
例如对每条路线进行安全检查。使用拦截器,只需编写一次,它就会应用于所有路由,甚至是添加的新路由。
共有三种口味。
intercept
在路由时拦截每个处理步骤 路由中的交换。interceptFrom
拦截每一个传入 路由交换(处理开始)interceptSendToEndpoint
当一个 Exchange 即将发送到端点。
拦截器可以配置为 "fire" 仅针对特定端点类型或 Camel predicate 在其他特定条件下。
还有onCompletion
feature到在路由完成时做类似的事情。成功完成失败完成或两者都完成(默认)。