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日

相关文章

  • 通过Java实现添加或删除PDF中的附件

    这里介绍通过Java实现添加或删除PDF中的附件的完整攻略: 1. 添加附件 1.1 引入相关库 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import org.apache…

    Java 2023年5月19日
    00
  • Spring Boot常用注解(经典干货)

    下面是对应的攻略: Spring Boot常用注解(经典干货) Spring Boot 是一个非常流行的 Java 后端框架,使用注解可以让我们更加方便快捷地进行开发。在这篇文章中,我们将详细讲解 Spring Boot 中常用的注解。 @RestController 在 Spring Boot 中,我们可以通过 @RestController 注解来标记一…

    Java 2023年5月19日
    00
  • 深入介绍Spring框架及故障排除

    深入介绍Spring框架及故障排除 Spring框架是一个开源的Java平台应用程序框架,它可以帮助开发人员快速开发企业级Java应用程序。该框架提供了许多功能来简化开发过程,例如IoC容器,数据访问支持,Web应用程序开发,AOP和安全性等。但是,在使用Spring框架时,您可能会遇到一些问题。这篇文章将提供一些故障排除技巧,以帮助您解决Spring框架的…

    Java 2023年5月19日
    00
  • Java 数据库连接池 Tomcat介绍

    Java 数据库连接池 Tomcat介绍 什么是数据库连接池 数据库连接池(Database Connection Pool)是一种在应用程序和数据库之间建立和维护连接的技术。它可以减轻应用程序频繁创建和销毁数据库连接的负担,从而提高应用程序的性能。 Tomcat中的数据库连接池 在Tomcat中,我们可以使用Tomcat提供的JDBC连接池,来实现对数据库…

    Java 2023年5月19日
    00
  • 通俗讲解JVM的类加载机制

    我们来详细讲解一下JVM的类加载机制。 1. 什么是类加载 类加载是指将类的.class文件中的二进制数据读入内存,将其转换成方法区中的运行时数据结构,在堆中生成一个代表该类的java.lang.Class对象,作为方法区中该类的各种数据的访问入口。类加载是Java虚拟机进行的一个重要的工作。 2. 类加载的过程 类加载的过程分为三个步骤: 2.1 加载(L…

    Java 2023年6月15日
    00
  • C/S和B/S两种架构的概念、区别和联系

    C/S架构和B/S架构是两种常见的软件架构模式,本文将为您详细讲解它们的概念、区别和联系,并举例说明。 1. C/S架构 C/S是Client/Server的缩写,即客户端/服务器架构模式。在C/S架构中,软件系统被分为两部分:客户端和服务器端。客户端负责与用户交互,并向服务器端发出请求,服务器端则负责处理请求,并向客户端提供数据或服务。C/S架构通常被用于…

    Java 2023年5月19日
    00
  • Java web spring异步方法实现步骤解析

    接下来我将详细讲解“Java web spring异步方法实现步骤解析”的完整攻略。 Java web spring异步方法实现步骤解析 什么是异步方法? 异步方法是指程序不必等待当前方法执行完毕才继续执行后续代码,而是在当前方法执行时,同时启动另一个线程去执行其他代码,可以提高程序的响应速度和性能。 实现步骤 1. 引入spring-web依赖 在项目的p…

    Java 2023年5月19日
    00
  • 老生常谈Java反射机制(必看篇)

    老生常谈Java反射机制(必看篇) 什么是Java反射机制? Java反射机制是Java提供的一种能够在运行时获取对象的信息以及修改对象的内容的方法。通过反射机制,程序可以获取任意一个类的内部信息,并且可以操作类、构造器、方法、成员变量等。 反射机制的应用场景 通过配置文件来读取实例化的对象 对框架类进行扩展 调试时查看对象的属性信息 反射机制的基本用法 获…

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