0

Fuse ESB (7.1.0) 内に組み込みの activemq ブローカーを使用し、コンシューマーを同じ場所に配置しています。

プロデューサー クライアントは、リモートの GlassFish サーバーにデプロイされます。spring jms テンプレートとともに activeMQ リソース アダプター (5.6.0) を使用します。クライアントはメッセージをさまざまなキューに発行します。一部のメッセージ (特定のキューに送られる) で jms.useAsyncSend=true を使用する必要がありますが、他のメッセージではデフォルトを使用する必要があります。以下のオプションが表示されます

1) オプション 'jms.useAsyncSend=true' をリソース アダプタ URL に追加できません。

2) 接続ファクトリーの JNDI ルックアップは、「org.apache.activemq.ra.ActiveMQConnectionFactory」のインスタンスを返しています。実際には、対応する jmsTemplate に setUseAsyncSend() を使用できる org.apache.activemq.ActiveMQConnectionFactory のインスタンスを期待していました。したがって、このオプションも使用できません。

3) GlassFish コネクタの下に複数の接続ファクトリを構成しています (キューごとに 1 つ)。プロパティ 'jms.useAsyncSend=true' を追加のプロパティとして特定の接続ファクトリに渡そうとしています。これは、その特定の接続プールで作成された接続に対してのみ使用されることを期待しています。さて、これを行ったので、本当に機能したかどうかを確認したいと思います。

質問 1) プロパティ 'useAsyncSend' が受信メッセージに設定されているかどうかをコンシューマー側で確認する方法はありますか? これは、プロデューサー側で行ったことが実際に機能していることを確認するためです。メッセージをエンド コンシューマーにルーティングするために camel-context を使用していることに注意してください。来たコンテキスト内でこれを確認する方法はありますか? これに対応するヘッダーまたはそのようなものはありますか?

質問 2) 「useAsyncSend」の異なる値を持つ異なるキューにメッセージを送信するために 1 つのリソース アダプタが使用されるプロデューサー側で「useAsyncSend」を設定するより良い方法はありますか。

「useAsyncSend」は activeMQ 固有の構成であるため、jmstemplate インターフェイスでは使用できないことを理解しています

これに関する助けに感謝します。

ありがとう

4

1 に答える 1

0

Fuse ESB についてはわかりませんが、さまざまなプロパティ (私の場合は RedeliveryPolicy) を持つさまざまな ActiveMQ 接続を作成しました。次に、プロデューサーとコンシューマーに適切な接続を使用するように指示します。

したがって、Spring xml を使用して接続を定義する場合、次のようになります。

<!-- Connection factory with useAsyncSend=true -->
<bean id="asyncCF" class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="${broker.url}" />
    <property name="useAsyncSend" value="true" />
</bean>
<!-- Connection factory with useAsyncSend=false -->
<bean id="syncCF" class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="${broker.url}" />
    <property name="useAsyncSend" value="false" />
</bean>

または、url 値のパラメーターとして useAsyncSend を指定します。

これは、質問 2 に役立つ可能性があります。

于 2013-10-22T16:17:43.823 に答える