2017-04-26 8 views
2

私は、WebSphere MQとI着信メッセージ読み取るためにアノテーションでJMSリスナーを作成し使用しています:WMQ_MQMD_READ_ENABLEDを設定するにはどのようにconfigコン春JMSリスナー

@JmsListener(宛先= "$ {queues.inputを}"、 containerFactory =「listenerFactory」)

受信メッセージは会計トークンセットと呼ばれるMQMDフィールドを持っていると私はそれを読みたいです。 IBM docを読んで、WMQ_MQMD_READ_ENABLED宛先をに設定する必要があります。しかし、JmsListenerを設定する方法は、アノテーションの文字列名に過ぎません。このプロパティを設定するにはどうすればいいですか?

+0

私はIBM MQで動作しますが、Springではあまり役に立ちません。このポストは参考になるかもしれませんが、JmsListenerを使用していません。 http://forum.spring.io/forum/spring-projects/integration/jms/97168-how-to-set-wmqconstants-wmq-mqmd-read-enabled-in-spring – JoshMc

+0

@JoshMcリンクをありがとう。はい、私はそれも読んでいます。私はちょうどフィールドを設定するキューオブジェクトを取得する必要があります。私はちょうど春にどのように知りません。おそらく注釈では不可能かもしれません。ありがとうございます。 – sarahTheButterFly

答えて

2

目的地に適切に設定された@Bean(必要なプロパティが設定されたMQQueue)を追加します。

DefaultJmsListenerContainerFactoryは、BeanFactoryDestinationResolverdestinationResolverプロパティに使用するように設定します。

リゾルバも@Beanである必要があります。したがって、Beanファクトリへの参照を取得します。

次に、${queues.input}はキューのBean名に解決され、リスナーコンテナはデフォルト宛先リゾルバではなくその宛先を使用します。宛先リゾルバはSessionから宛先を作成します。

EDIT

だけ明確にする...注釈の

destinationプロパティは、実際に設定さDestinationResolverを使用してDestinationオブジェクトに解決さ宛先名です。

デフォルトのリゾルバ(DynamicDestinationResolver)は、単にsession.createQueue()またはsession.createTopic()を呼び出します。したがって、JMSプロバイダのクライアントライブラリが提供するデフォルトの宛先を取得できます。

BeanFactoryDestinationResolverでは、完全に構成された宛先オブジェクトであり、プロバイダのライブラリに合わせたアプリケーションコンテキストで、宛先名をBeanに解決します。

したがって、BFリゾルバを直接(試してみて)、またはコンテナファクトリ経由で使用するようにDMLCを設定するだけで、それぞれ@JmsListenerのDMLCを作成し、それぞれにリゾルバを渡します。したがって、宛先名は完全に設定されたDestinationインスタンスに解決されます。

+0

できます!私はJmsListenerContainerFactoryの代わりにDefaultJmsListenerContainerを設定することによっても動作させました。しかし、私はあなたのソリューションがより好きです。シーンの後ろで何が起こるかについて、より詳細な説明をしてもらえますか? – sarahTheButterFly

+0

私はいくつかの説明で答えを編集しました。助けてくれることを望む。 –

+0

編集していただきありがとうございます。あなたの回答を後でアップボートして受け入れます(これらの機能は何らかの理由で職場で働かない)。 – sarahTheButterFly

関連する問題