Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用主题和队列处理@JmsListener的更简单方法_Java_Spring_Jms_Spring Jms - Fatal编程技术网

Java 使用主题和队列处理@JmsListener的更简单方法

Java 使用主题和队列处理@JmsListener的更简单方法,java,spring,jms,spring-jms,Java,Spring,Jms,Spring Jms,我正在原型化一个应用程序,以测试未来应用程序的spring消息传递功能 我知道我们需要在同一个应用程序中处理来自activemq的主题和队列。因此,在同一个bean中,我应该有一个@JmsListener注释的方法,它将听到一个队列,另一个将听到一个主题。可能吗 最简单的方法是什么?我看到了一些使用SpringJMS之类的主题的答案,但在这种情况下,我想我需要创建两个DefaultMessageListenerContainer,一个用于主题,另一个用于队列。这是最好的解决方案吗 这个问题有什么

我正在原型化一个应用程序,以测试未来应用程序的spring消息传递功能

我知道我们需要在同一个应用程序中处理来自activemq的主题和队列。因此,在同一个bean中,我应该有一个@JmsListener注释的方法,它将听到一个队列,另一个将听到一个主题。可能吗

最简单的方法是什么?我看到了一些使用SpringJMS之类的主题的答案,但在这种情况下,我想我需要创建两个DefaultMessageListenerContainer,一个用于主题,另一个用于队列。这是最好的解决方案吗


这个问题有什么注释方法吗?

框架将负责为每个
@JmsListener
创建一个容器;您只需通过
containerFactory
属性告诉它要使用哪个容器工厂。

下面是一个完整的示例,说明如何为spring boot主题设置第二个容器工厂:

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);
    }
}