2016-07-05 9 views
1

今後のアプリケーションで春のメッセージング機能をテストするアプリケーションのプロトタイプを作成しています。トピックとキューを持つ@JmsListenerをより簡単に処理する方法

私が必要とすることは、同じアプリケーションでactivemqのトピックとキューを処理することです。ですから、同じBeanでは、キューを聞く@JmsListenerによって注釈を付けられたメソッドと、トピックを聞く別のメソッドが必要です。それは可能ですか?

これを行う簡単な方法は何ですか?私はthis oneのようなspring-jmsのトピックを使用する答えを見ましたが、その場合、トピック用とキュー用の2つのDefaultMessageListenerContainerを作成する必要があると思います。これが最善の解決策ですか?

この問題のアノテーションアプローチはありますか?

答えて

0

フレームワークは、それぞれ@JmsListenerのコンテナを作成します。 containerFactoryプロパティで使用するコンテナファクトリを指定するだけで済みます。ここで

1

は春ブーツとのトピックのための第二の容器の工場を設定する方法の完全な例です:

JmsDemoApplication.java:

package net.lenthe; 

import javax.jms.ConnectionFactory; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.context.annotation.Bean; 
import org.springframework.jms.config.DefaultJmsListenerContainerFactory; 

@SpringBootApplication 
public class JmsDemoApplication { 

    @Autowired 
    private ConnectionFactory connectionFactory; 

    @Bean(name = "topicJmsListenerContainerFactory") 
    public DefaultJmsListenerContainerFactory getTopicFactory() { 
     DefaultJmsListenerContainerFactory f = new DefaultJmsListenerContainerFactory(); 
     f.setConnectionFactory(connectionFactory); 
     f.setSessionTransacted(true); 
     f.setPubSubDomain(true); 
     return f; 
    } 

    public static void main(String[] args) { 
     SpringApplication.run(JmsDemoApplication.class, args); 
    } 
} 

MessageListenerBean.java:

package net.lenthe; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.jms.annotation.JmsListener; 
import org.springframework.stereotype.Component; 

@Component 
public class MessageListenerBean { 

    private Logger logger = LoggerFactory.getLogger(this.getClass()); 

    @JmsListener(destination = "myMessageTopic", containerFactory = "topicJmsListenerContainerFactory") 
    public void processTopicMessage(String content) { 
     logger.info("Received topic message. Content is " + content); 
    } 

    @JmsListener(destination = "myMessageQueue") 
    public void processQueueMessage(String content) { 
     logger.info("Received queue message. Content is " + content); 
    } 
} 
関連する問題