Apache Camel Jgroups controlbus XML 使用预定义过滤器的示例
Apache Camel Jgroups controlbus XML examples to use predefined filters
我正在尝试改造我的代码以利用 Jgroups / controlbus,但是,我需要一个蓝图 XML 表示。
如何在骆驼路线上实施预定义过滤器和延迟?
<route autoStartup="true" id="clusterControlRoute">
<from uri="jgroups:fleetPredixCluster?enableViewMessages=true&channelProperties=etc/jgroups.xml" />
<!--
.filter(dropNonCoordinatorViews())
.threads().delay(delayIfContextNotStarted(SECONDS.toMillis(5))) // run in separated and delayed thread. Delay only if the context hasn't been started already.
.log(LoggingLevel.INFO, "Starting JGroups JChannel Consumer!!!!!!!!!!!!!!!!!!!!!")
-->
<to uri="controlbus:route?routeId=inRouteMT1&action=start&async=true"/>
</route>
如何将这些预定义的过滤器和表达式与 XML 一起使用?
<filter><simple> JGroupsFilters.dropNonCoordinatorViews() </simple></filter>
<threads><delay> delayIfContextNotStarted(SECONDS.toMillis(5) </delay></threads>
问过 RedHat Team,感谢,这些人真棒!
我知道我们必须实现为 beans,但是,需要语法,无法在线找到。
所以这里是...
一般来说,如果您登录 karaf shell 和 运行 命令:
路线表演
您将获得路由代码的 XML 表示(Spring,但接近蓝图语法)。
在这种情况下,它变得有点复杂,因为路由使用编译的谓词和表达式(dropNonCoordinatorViews 和 delayIfContextNotStarted),它们只是显示为对象实例(地址带有 @ 符号)。
为了在蓝图中使用那些编译好的谓词/表达式,我们需要将它们实例化为bean,然后引用它们。
我们可以利用 org.apache.camel.component.jgroups.JGroupsFilters 和 org.apache.camel.component.jgroups.JGroupsExpressions 上的静态方法作为工厂方法来实例化它们,如下所示:
<bean id="dropNonCoordinatorViews" class="org.apache.camel.component.jgroups.JGroupsFilters" factory-method="dropNonCoordinatorViews" scope="prototype"/>
<bean id="delayIfContextNotStarted" class="org.apache.camel.component.jgroups.JGroupsExpressions" factory-method="delayIfContextNotStarted" scope="prototype">
<argument value="5000"/>
</bean>
This gives us the dropNonCoordinatorViews Predicate and delayIfContextNotStarted Expression as beans we can use in the route:
We can use the Predicate as a method directly, like so:
<filter id="filterNonCoordinatorViews">
<method ref="dropNonCoordinatorViews"/>
And the Expression in a <ref> block, like so:
<delay id="delay1">
<ref>delayIfContextNotStarted</ref>
我正在尝试改造我的代码以利用 Jgroups / controlbus,但是,我需要一个蓝图 XML 表示。
如何在骆驼路线上实施预定义过滤器和延迟?
<route autoStartup="true" id="clusterControlRoute">
<from uri="jgroups:fleetPredixCluster?enableViewMessages=true&channelProperties=etc/jgroups.xml" />
<!--
.filter(dropNonCoordinatorViews())
.threads().delay(delayIfContextNotStarted(SECONDS.toMillis(5))) // run in separated and delayed thread. Delay only if the context hasn't been started already.
.log(LoggingLevel.INFO, "Starting JGroups JChannel Consumer!!!!!!!!!!!!!!!!!!!!!")
-->
<to uri="controlbus:route?routeId=inRouteMT1&action=start&async=true"/>
</route>
如何将这些预定义的过滤器和表达式与 XML 一起使用?
<filter><simple> JGroupsFilters.dropNonCoordinatorViews() </simple></filter>
<threads><delay> delayIfContextNotStarted(SECONDS.toMillis(5) </delay></threads>
问过 RedHat Team,感谢,这些人真棒!
我知道我们必须实现为 beans,但是,需要语法,无法在线找到。 所以这里是...
一般来说,如果您登录 karaf shell 和 运行 命令:
路线表演
您将获得路由代码的 XML 表示(Spring,但接近蓝图语法)。
在这种情况下,它变得有点复杂,因为路由使用编译的谓词和表达式(dropNonCoordinatorViews 和 delayIfContextNotStarted),它们只是显示为对象实例(地址带有 @ 符号)。
为了在蓝图中使用那些编译好的谓词/表达式,我们需要将它们实例化为bean,然后引用它们。
我们可以利用 org.apache.camel.component.jgroups.JGroupsFilters 和 org.apache.camel.component.jgroups.JGroupsExpressions 上的静态方法作为工厂方法来实例化它们,如下所示:
<bean id="dropNonCoordinatorViews" class="org.apache.camel.component.jgroups.JGroupsFilters" factory-method="dropNonCoordinatorViews" scope="prototype"/>
<bean id="delayIfContextNotStarted" class="org.apache.camel.component.jgroups.JGroupsExpressions" factory-method="delayIfContextNotStarted" scope="prototype">
<argument value="5000"/>
</bean>
This gives us the dropNonCoordinatorViews Predicate and delayIfContextNotStarted Expression as beans we can use in the route:
We can use the Predicate as a method directly, like so:
<filter id="filterNonCoordinatorViews">
<method ref="dropNonCoordinatorViews"/>
And the Expression in a <ref> block, like so:
<delay id="delay1">
<ref>delayIfContextNotStarted</ref>