構築するための環境
1. Mavenプロジェクト(jarファイル)を作成します。
依存関係を追加2.pom.xml
<親> <のgroupId> org.springframework.boot </のgroupId> <たartifactId>ばねブートスタータ親</たartifactId> <バージョン> 1.4.0.RELEASE </バージョン> </親> <依存性> <依存> <のgroupId> org.springframework.boot </のgroupId> <たartifactId>ばねブートデベロッパーツール</たartifactId> </依存> <依存性> <のgroupId> org.springframework.boot </のgroupId> <たartifactId>スプリングブート-starter-ウェブ</たartifactId> </依存関係> <依存> <groupIdを> org.springframework.boot </ groupIdを> <たartifactId>ばねブートスタータActiveMQの</たartifactId> </依存> </依存関係>
3.書き込み、ブートストラップクラス
@SpringBootApplication パブリック クラスアプリケーション{ 公共 静的 ボイドメイン(文字列[]引数){ SpringApplication.run(アプリケーションクラス、引数)。 } }
4.構成application.propertiesリソースで対応する設定ファイルを追加します。
URL = tcp-spring.activemq.broker:// 192.168.25.131:61616 #ActiveMQのサーバにこのURLのリンク
クラス注射5. JmsMessageTemplate
@Autowired プライベート JmsMessagingTemplate jmsMessagingTemplate。
6. JmsMessageTemplateを呼び出すためのメッセージを送信する方法
jmsMessagingTemplate.convertAndSend(「キューメッセージ名」、「メッセージの内容」)。
ガイドカテゴリに配置されたメッセージの種類
キュー
@Bean(名前= "キュー" ) 公共先getQueue(){ 返す 新しい( "queue_test" ActiveMQQueueを)。 }
トピック
@Bean(名前= "トピック" ) 公共先getTopic(){ 返す 新しい( "topic_test" ActiveMQTopicを)。 }
クラスインジェクション送信されるメッセージのタイプ
先の注入型のオブジェクトは、メッセージの送信メッセージクラスを送信します
キュー
@Resource(名前=「キュー」) プライベート宛先キュー。
トピック
@Autowired @Qualifier(値 =「トピック」) プライベート先のトピック。
jmsMessageTemplate.convertAndSend(キュー、「メッセージの内容」);
jmsMessageTemplate.convertAndSend(トピック、「メッセージの内容」)。
@Component パブリック クラスActiveMQConsumer { // 接收キュー消息 @JmsListener(先= "queue_test" ) 公共 ボイドハンドラ(文字メッセージ){ のSystem.out.println(メッセージ)。 } // 接收トピック消息の @JmsListener(先= "topic_test" ) 公共 ボイドhandlerTopic(文字列msessage){ のSystem.out.println(msessage)。 } }
コントローラクラスのメソッドを追加 @RequestMapping(「/送信」) 公共 ボイドsendQueue(){ jmsMessagingTemplate.convertAndSend(キュー、「メッセージ・キューである」;)( トピック、jmsMessagingTemplate.convertAndSend「メッセージのトピックです」)。 }
実行した後、コンソール出力のみQueueメッセージ
Springboot統合モードのみの処理のためにActiveMQのメッセージキューのキューを監視することができ、そのトピックのメッセージを対処する方法?
ソリューション:
application.propertiesのファイルSpringbootに以下を追加します。
Sub-Domain-spring.jms.pub = trueに //のデフォルトはfalseで、オープンサブスクリプションモデルを公開
テストを開始
これらの変更の後、我々は、メッセージの話題を聞くメッセージをキューして得ることができないことができます。
ソリューション:
唯一のカスタム・リスナー・クラスによって処理
@JmsListenerリスナクラスではconnectionFactoryプロパティを追加します
@Component パブリック クラスActiveMQConsumer { // 接收キュー消息 @JmsListener(先= "queue_test"、containerFactory = "queueListenerContainerFactory" ) 公共 ボイドハンドラ(文字メッセージ){ のSystem.out.println(メッセージ)。 } // 接收トピック消息の @JmsListener(先= "topic_test"、containerFactory = "topicListenerContainerFactory" ) 公共 ボイドhandlerTopic(文字列msessage){ のSystem.out.println(msessage)。 } }
コンフィギュレーション・クラスの2つのリスナープラント構成を提供し、プロファイルクラスを作成します。
@Configuration パブリック クラスConsumerConfiguration { @value( "$ {spring.activemq.broker-URL}" ) プライベート文字列のホスト。 @Bean 公共のConnectionFactory getActiveMqConnectionは(){ 戻り 新しいActiveMQConnectionFactory(ホスト)。 } @Bean(名 = "queueListenerContainerFactory" ) 公衆JmsListenerContainerFactory queueListenerContailerFactory(ConnectionFactoryのはconnectionFactory){ DefaultJmsListenerContainerFactory工場 = 新しいDefaultJmsListenerContainerFactory()。 factory.setConnectionFactory(はconnectionFactory)。 factory.setPubSubDomain(偽); リターン工場; } @Bean(名 = "topicListenerContainerFactory" ) 公衆JmsListenerContainerFactory topicListenerContainerFactory(ConnectionFactoryのはconnectionFactory){ DefaultJmsListenerContainerFactory工場 = 新しいDefaultJmsListenerContainerFactory()。 factory.setConnectionFactory(はconnectionFactory)。 factory.setPubSubDomain(真の); リターン工場; } }
テストを実行