ActiveMQ结合Spring收发消息的示例代码

ActiveMQ是目前非常流行的一种消息中间件,而Spring框架则是目前最为流行的Java企业应用开发框架之一。它们可以结合使用,为我们带来高效可靠的消息传递。

下面,我将详细讲解如何在Spring中使用ActiveMQ进行消息的发送与接收。

环境准备

在开始使用之前,需要先准备好以下环境。

  1. 安装ActiveMQ。
  2. 创建一个Maven项目,添加ActiveMQ的依赖。
<dependency>
  <groupId>org.apache.activemq</groupId>
  <artifactId>activemq-all</artifactId>
  <version>5.15.13</version>
</dependency>

发送消息

发送消息的过程就是向ActiveMQ队列中添加消息。我们可以通过ActivemqTemplate来完成。

@Autowired
private JmsTemplate jmsTemplate;

public void sendMessage(String destination, final String message) {
    jmsTemplate.send(destination, new MessageCreator() {
        public Message createMessage(Session session) throws JMSException {
            return session.createTextMessage(message);
        }
    });
}

在上面的代码中,我们首先注入了JmsTemplate对象,然后定义了一个sendMessage方法。在该方法中,我们调用了jmsTemplate的send方法,向目标队列中发送一条消息。

接收消息

接收消息的过程就是从ActiveMQ队列中获取消息。我们可以通过Spring的MessageListenerContainer来监听消息。

@Autowired
private JmsTemplate jmsTemplate;

@Autowired
private MessageListenerContainer messageListenerContainer;

public void receiveMessage(String destination) {
    messageListenerContainer.setDestinationName(destination);
    messageListenerContainer.setMessageListener(new MessageListener() {
        public void onMessage(Message message) {
            if (message instanceof TextMessage) {
                TextMessage textMessage = (TextMessage) message;
                try {
                    System.out.println("Received message:" + textMessage.getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        }
    });
}

在上面的代码中,我们注入了JmsTemplate和MessageListenerContainer对象。接着,我们定义了一个receiveMessage方法。在该方法中,我们通过messageListenerContainer的setDestinationName方法设置目标队列名,并通过setMessageListener方法来设置消息监听器。当有消息到来时,消息监听器就会被触发,在其中可以通过message对象获取到消息。

示例代码1

下面我们来看一个完整的示例,演示如何发送消息到ActiveMQ队列。

@Configuration
public class AppConfig {

    @Bean
    public ActiveMQConnectionFactory activeMQConnectionFactory() {
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
        connectionFactory.setBrokerURL("tcp://localhost:61616");
        return connectionFactory;
    }

    @Bean
    public JmsTemplate jmsTemplate() {
        JmsTemplate jmsTemplate = new JmsTemplate();
        jmsTemplate.setConnectionFactory(activeMQConnectionFactory());
        jmsTemplate.setDefaultDestinationName("myQueue");
        return jmsTemplate;
    }

    @Bean
    public SendMessageService sendMessageService() {
        SendMessageService sendMessageService = new SendMessageService();
        sendMessageService.setJmsTemplate(jmsTemplate());
        return sendMessageService;
    }
}

public class SendMessageService {

    private JmsTemplate jmsTemplate;

    public void setJmsTemplate(JmsTemplate jmsTemplate) {
        this.jmsTemplate = jmsTemplate;
    }

    public void sendMessage() {
        jmsTemplate.send(new MessageCreator() {
            public Message createMessage(Session session) throws JMSException {
                return session.createTextMessage("Hello, world!");
            }
        });
    }
}

public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        SendMessageService sendMessageService = context.getBean(SendMessageService.class);
        sendMessageService.sendMessage();
    }
}

在上面的示例中,我们首先定义了一个AppConfig类,用于配置JmsTemplate和ActiveMQ连接工厂。然后定义了一个SendMessageService类,用于向队列中发送消息。最后,在main方法中,我们通过获取SendMessageService对象,调用sendMessage方法来发送消息。

示例代码2

下面我们来看一个完整的示例,演示如何从ActiveMQ队列中接收消息。

@Configuration
public class AppConfig {

    @Bean
    public ActiveMQConnectionFactory activeMQConnectionFactory() {
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
        connectionFactory.setBrokerURL("tcp://localhost:61616");
        return connectionFactory;
    }

    @Bean
    public JmsTemplate jmsTemplate() {
        JmsTemplate jmsTemplate = new JmsTemplate();
        jmsTemplate.setConnectionFactory(activeMQConnectionFactory());
        jmsTemplate.setDefaultDestinationName("myQueue");
        return jmsTemplate;
    }

    @Bean
    public ReceiveMessageService receiveMessageService() {
        ReceiveMessageService receiveMessageService = new ReceiveMessageService();
        receiveMessageService.setJmsTemplate(jmsTemplate());
        receiveMessageService.setMessageListenerContainer(messageListenerContainer());
        return receiveMessageService;
    }

    @Bean
    public MessageListenerContainer messageListenerContainer() {
        DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
        container.setConnectionFactory(activeMQConnectionFactory());
        container.setDestinationName("myQueue");
        container.setMessageListener(new MessageListener() {
            public void onMessage(Message message) {
                if (message instanceof TextMessage) {
                    TextMessage textMessage = (TextMessage) message;
                    try {
                        System.out.println("Received message:" + textMessage.getText());
                    } catch (JMSException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        return container;
    }
}

public class ReceiveMessageService {

    private JmsTemplate jmsTemplate;

    private MessageListenerContainer messageListenerContainer;

    public void setJmsTemplate(JmsTemplate jmsTemplate) {
        this.jmsTemplate = jmsTemplate;
    }

    public void setMessageListenerContainer(MessageListenerContainer messageListenerContainer) {
        this.messageListenerContainer = messageListenerContainer;
    }

    public void receiveMessage() {
        messageListenerContainer.start();
    }
}

public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        ReceiveMessageService receiveMessageService = context.getBean(ReceiveMessageService.class);
        receiveMessageService.receiveMessage();
    }
}

在上面的示例中,我们也首先定义了一个AppConfig类,用于配置JmsTemplate和ActiveMQ连接工厂以及MessageListenerContainer。然后定义了一个ReceiveMessageService类,用于监听队列中的消息。最后,在main方法中,我们通过获取ReceiveMessageService对象,调用receiveMessage方法来监听消息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ActiveMQ结合Spring收发消息的示例代码 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • LocalDateTime

    // LocalDateTime类: 获取日期时间信息。格式为 2018-09-06T15:33:56.750 // 得到指定日期时间 LocalDateTime dateTime = LocalDateTime.of(1985, 4, 15, 12, 12, 12); // 得到当前日期时间 LocalDateTime localDateTime = Lo…

    Java 2023年4月22日
    00
  • 微信公众平台获取access_token的方法步骤

    下面是关于微信公众平台获取access_token的方法步骤以及示例说明的完整攻略。 什么是access_token? 在微信公众平台开发中,为了保证安全性,许多接口需要access_token,access_token是认证微信公众账号的全局唯一票据,用于调用微信公众平台开发接口。 获取access_token的方法步骤 准备请求参数 请求参数是指appi…

    Java 2023年5月23日
    00
  • 解决Hmily与Feign冲突报错 NullPointerException的问题

    解决Hmily与Feign冲突报错NullPointerException的问题的完整攻略如下: 引入Hmily和Feign的依赖 在使用Hmily和Feign时需要引入它们的依赖,比如在Maven中可以使用以下依赖: <dependency> <groupId>org.springframework.cloud</groupI…

    Java 2023年5月26日
    00
  • Spring Security过滤器链加载执行流程源码解析

    针对Spring Security过滤器链加载执行流程源码解析的完整攻略,我把它分为以下几个部分: 概述 Spring Security过滤器链的加载流程 Spring Security过滤器链的执行流程 示例1:启动时访问静态资源 示例2:访问受保护资源 下面对每个部分进行详细讲解。 1. 概述 Spring Security是一个基于Spring框架的安…

    Java 2023年5月20日
    00
  • Java编程实现调用com操作Word方法实例代码

    下面是Java编程实现调用com操作Word方法的完整攻略和示例说明: 调用com操作Word方法的完整攻略 第一步:添加Word对象库 在Java项目中调用Word COM对象之前,首先需要添加Word对象库。在Eclipse中可以通过以下步骤添加: 打开Java项目,右键单击项目名称,选择“Properties”; 在“Java Build Path”中…

    Java 2023年5月23日
    00
  • java实现小型局域网群聊功能(C/S模式)

    Java实现小型局域网群聊功能(C/S模式) 简介 C/S模式是一种网络通信模式,即客户端(S)与服务端(S)之间的网络通信模式。在这种模式下,客户端发送请求,服务端响应请求,并返回响应结果给客户端。 实现步骤 创建服务端(Server)和客户端(Client)程序。 在服务端中创建ServerSocket对象,监听客户端的连接请求。 客户端连接到服务端。 …

    Java 2023年5月19日
    00
  • Java简明解读代码块的应用

    下面是详细讲解“Java简明解读代码块的应用”的完整攻略。 什么是代码块 在Java中,代码块是指用{}括起来的一组代码,是一种组织代码的方式,可以用来限制变量的作用域、初始化变量、进行一次性的逻辑操作等。 Java中分为四种不同类型的代码块: 普通代码块 静态代码块 同步代码块 构造代码块 下面将分别对每种代码块进行详细介绍。 普通代码块 普通代码块是最常…

    Java 2023年5月26日
    00
  • maven profile动态选择配置文件详解

    下面是本人为你准备的maven profile动态选择配置文件的攻略,希望能帮助到你。 什么是maven profile Maven Profile是Maven中的一个重要概念,它定义了一组配置的集合,用来指定开发、测试和生产环境下使用不同的配置。通过设置不同的Profile,可以实现在不同环境下对应用程序的多个设置的更改。 Maven Profile的配置…

    Java 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部