spring boot2.0 activeMQを統合し、p 2 pとtopicの両方のメッセージモードの互換性の共存を実現

2363 ワード

前の記事ではspring bootを使用してactiveMQを統合し、ptpとtopicの両方のメッセージモードを実現するには、デフォルトでqueueモード(つまりp 2 p)であり、topicを実現するにはプロファイルに次のように配置する必要があります.
#          false,activemq    queue  ,    topic       true
spring.jms.pub-sub-domain=false

前の文章は2つの問題を残した:1.どのようにしてこの2つのモードを共存させることができますか?2.コメントエリアによると、接続プールを開くと、起動項目が間違っているという.次に、この2つの状況について説明します.
p 2 pとtopicの両方のメッセージモード互換性が共存する
  • springboot 2に基づく.0+
  • 実際消費者は@JmsListener(destination="queue")を使用してキューメッセージを傍受し、消費する際にデフォルトのリスナー:
  • を使用する.
    @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Repeatable(JmsListeners.class)
    @MessageMapping
    public @interface JmsListener {
        String id() default "";
    
        String containerFactory() default "";
    
        String destination();
    
        String subscription() default "";
    
        String selector() default "";
    
        String concurrency() default "";
    }
    
  • 注釈から指定されたリスニングを処理するキューのほかに、リスニングコンテナ工場を指定することもできます.もし、queueとtopicの2つのリスニングコンテナ工場を定義すれば、プロジェクトで2つのモードを共存させることができますか?次に、
  • を試してみましょう.
  • まずqueueとtopicのリスニング工場をそれぞれ定義します:
  • @Bean
    public JmsListenerContainerFactory> queueListenerFactory(ConnectionFactory connectionFactory) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setPubSubDomain(false);
        factory.setConnectionFactory(connectionFactory);
        return factory;
    }
        
    @Bean
    public JmsListenerContainerFactory> topicListenerFactory(ConnectionFactory connectionFactory) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setPubSubDomain(true);
        factory.setConcurrency("1");
        factory.setConnectionFactory(connectionFactory);
        return factory;
    }
    
  • その後、消費者の注釈に傍受容器工場を指定する:
  • @JmsListener(destination = "queue",containerFactory = "queueListenerFactory")
    public void receiveQueue(String text) {
        log.info("consumer  queue  :{}",text);
    }
    
    @JmsListener(destination = "topic",containerFactory = "topicListenerFactory")
    public void receiveTopic(String text) {
        log.info("consumer  topic  :{}",text);
    }
    
  • これまでプロジェクトで共存queueとtopicの2つのモード
  • を互換化することに成功した.
    2つ目の問題については、次の編で話しましょう.