2017-01-31 8 views
1

私は現在Camelを学んでいますが、固定間隔でcamelからactivemqキュー/トピックにメッセージを送信できるかどうかわかりません。Camelは1分後にJMS経由でキューにメッセージを送信し続けます

現在私はデータベースを検索してメッセージを作成し、毎分後にラクダでこれを行うことができるように、Scalaでコードを作成しました。

私たちはラクダにタイマーコンポーネントを持っていますが、メッセージを生成しません。私はこのようなことを考えていた。

from("timer://foo?fixedRate=true&period=60000") 
.to("customLogic") 
.to("jms:myqueue") 
  1. タイマーは分後にキックされます。
  2. カスタム・ロジックは、データベースを検索し、メッセージ最後
  3. を作成いたしますので、いくつかのコードは本当に便利感謝

    になり、私はキャメルに非常に新しいですJMSキューへ

を送るあなたはポイントをしてくださいすることができます私はどのようにメッセージを作成し、それを次の ".to(" jms:myqueue ")に渡すことができるこのcustomeLogicメソッドを作成することができますか?継承/実装する必要のあるクラスがありますか?

+0

あなたの質問はありますか?あなたが持っているものは正しい道のりです。 – Strelok

+0

もしあなたが助けを受けたいなら、質問にいくつかの詳細を追加してください: 私はA、B、Cを持っています 私はXとYを試しましたが、それは動作しませんなど –

+0

StrelokとVyacheslav私は持っています質問に詳細を追加 – user320478

答えて

1

JMSメッセージのペイロードを準備するためにカスタムJavaロジックをラクダルートにフックする方法についてお聞きします。

JMSコンポーネントはExchange本体をJMSメッセージペイロードとして使用するため、カスタムロジックで本体を設定する必要があります。これを行うにはいくつかの方法があります。

あなたはorg.apache.camel.Processorインターフェイスを実装し、明示的に交換に新しいボディを設定することにより、custom processorを作成することができます。

Processor customLogicProcessor = new Processor() { 
    @Override 
    public void process(Exchange exchange) { 
     // do your db lookup, etc. 
     String myMessage = ... 
     exchange.getIn().setBody(myMessage); 
    } 
}; 

from("timer://foo?fixedRate=true&period=60000") 
    .process(customLogicProcessor) 
    .to("jms:myqueue"); 

よりエレガントなオプションがCamel's bean bindingを活用することである。

public class CustomLogic { 
    @Handler 
    public String doStuff() { 
     // do your db lookup, etc. 
     String myMessage = ... 
     return myMessage; 
    } 
} 

[...] 

CustomLogic customLogicBean = new CustomLogic(); 
from("timer://foo?fixedRate=true&period=60000") 
     .bean(customLogicBean) 
     .to("jms:myqueue"); 

@Handler注釈はCamelにどのメソッドを呼び出すべきかを伝えます。修飾メソッドが1つしかない場合は、その注釈は必要ありません。 Camelは、メソッドの結果を、JMSコンポーネントに渡されるエクスチェンジ上の新しいボディとして呼び出します。

関連する問題