Springbootは、メッセージのトピックを送受信問題を解決するためのActiveMQ統合

構築するための環境

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(真の);
        リターン工場; 
    } 
}

テストを実行

 

おすすめ

転載: www.cnblogs.com/sjq0928/p/11371620.html