gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 15:28:59 26 4
gpt4 key购买 nike

我正在制作一个应用程序原型(prototype),以测试 future 应用程序的 Spring 消息传递功能。

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

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

有没有解决这个问题的注释方法?

最佳答案

以下是如何使用 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);
}
}

关于java - 使用主题和队列处理 @JmsListener 的更简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38207720/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com