amqpエンドポイントの「参照」オプション(セクション2.4.3.3を参照。詳細を参照)のようなものはありますか?
3 に答える
「閲覧」コンポーネントがあります。to("browse:dummy")
、ただし、このルートを通過したメッセージを参照することのみが可能になります。場合によっては便利ですが、JMSブラウズオプションとしては実際にはそうではありません。
できることは、を使用BrowsableEndpoint
してJMSブラウズを実行することです(AMQPはJMSクライアントに基づいているため、AMQPでも機能するはずですが、試していません)。
ただし、実際にメッセージを受信して削除することはできないため、ブラウジングをトリガーするには別の何かが必要になります。タイマーやトリガーキューなど。
from("amqp:queue:trigger")
.process(new Processor(){
@Override
public void process(Exchange arg0) throws Exception {
BrowsableEndpoint browse = arg0.getContext().getEndpoint("amqp:queue:archive", BrowsableEndpoint.class);
List<Exchange> exchanges = browse.getExchanges();
System.out.println("Browsing queue: "+ browse.getEndpointUri() + " size: " + exchanges.size());
for (Exchange exchange : exchanges) {
String payload = exchange.getIn().getBody(String.class);
String msgId = exchange.getIn().getHeader("JMSMessageID", String.class);
System.out.println(msgId + "=" +payload);
}
}
});
このトリガーを達成するために、事前ルートを実行できます。
from("amqp:queue:processQueue")
.to("amqp:queue:archive")
.transform().constant("trigger msg")
.to("amqp:queue:trigger");
私は最終的にそれを理解しました、私はちょうどオプションがラクダコンポーネントオプションレベルにあるべきだと思いました、すなわち例えば「?mode =ブラウズ」の形の接続文字列の後、しかしオプションは実際にはamqp接続レベルに設定されるべきです-" my-queue; {モード:参照}"。「?option=value」を追加してラクダのコンポーネントオプションを設定できます。
PS amqp接続レベルでオプションを設定すると、偶数駆動(デフォルトのラクダ)ルーティングでは機能しますが、ポーリング駆動ルーティングでは機能しません。詳細については、https://issues.apache.org/jira/browse/CAMEL-6784を参照してください。。
はい。AMQP 0-10では、message.subscribeに取得モードオプションがあり、非取得に設定するとブラウジングサブスクリプションになります。AMQP1.0では、サブスクライバーを確立するときにソースに「コピー」の配布モードを指定することで同じことが実現されます。リンク。
ただし、JMSクライアントを介してAMQPにアクセスしていると仮定すると、Petterが上記で述べているように、私が想像するJMSで定義されているブラウジング機能を使用できるはずです(ラクダに精通していないため、その方法を理解できません)。