2016-11-01 1 views
1

私は、スケーラビリティのために本番環境で3つの同一のサービスとして動作するapache camelアプリケーションを持っています。私は、camel-mail APIを使用して、このアプリケーションに電子メールサーバーのポーリングを追加します。私はこれらの3つのインスタンスを同時にサーバーにポーリングしたくないので、私はラクダの世論調査の前にいくつかのロック機構を入れたいと思っています。しかし、郵便消費者が消費者をポーリングしているので、私はこの状況では使用できません。これを行う簡単な方法はありますか?要するにCamel条件付きポーリングコンシューマー

、私は以下のようなルートを持っている:

from("imaps://mymail...")//This polls periodically 
    .to(Processmail.class) 

をしかし、私は

from("timer:mytimer") 
    .to("direct:checkDistributedLock") 
    .choice() 
     .when(header("gotlock").isEqualTo("true")) 
     .from("imaps://..") // can not use from here!!! 
    .end() 
+0

は良いオプションのように見える、私はあなたに感謝しようとします。 – cacert

+0

@DariusX。あなたが答えとして下に入力すると、私はこれを受け入れることができます。ありがとうございました。 – cacert

答えて

1

pollEnrich()ラクダのDSLで、以下のようなものが必要あなたにポーリング消費者に「コールアウト」することができますあなたのルート内の一歩。つまり、「from()」のように使用できますが、ルートの途中で使用できます。

例:

from("timer:mytimer") 
    .to("direct:checkDistributedLock") 
    .choice() 
     .when(header("gotlock").isEqualTo("true")) 
     .pollEnrich("imaps://mymail...") 
     .to(Processmail.class) 
    .end()