Примеры использования Apache Camel Jgroups controlbus XML для использования предопределенных фильтров - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь адаптировать свой код в ретро-стиле для использования Jgroups / controlbus, однако мне нужно XML-представление Blueprint.

как я могу реализовать предопределенные фильтры и задержку на верблюжьих маршрутах?

<route autoStartup="true" id="clusterControlRoute">
   <from uri="jgroups:fleetPredixCluster?enableViewMessages=true&amp;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&amp;action=start&amp;async=true"/>
</route>

как я могу использовать эти предопределенные фильтры и выражения с XML?

<filter><simple> JGroupsFilters.dropNonCoordinatorViews() </simple></filter>
<threads><delay> delayIfContextNotStarted(SECONDS.toMillis(5) </delay></threads>

1 Ответ

0 голосов
/ 07 ноября 2019

Я спросил RedHat Team, кредит, эти парни великолепны!

Я знал, что мы должны реализовать как бины, но, мне нужен синтаксис, не мог найти в сети. так что вот оно ...

В общем, если вы войдете в оболочку karaf и выполните команду:

route-show

Вы получите представление XML (Весной, но близко к синтаксису плана) кода маршрута.

В этом случае он немного усложняется, потому что маршрут использует скомпилированные Predicate и Expresssion (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>
...