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

yizhihongxing

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泛型及其应用

    详解Java泛型及其应用 Java泛型是Java语言中非常重要的特性之一,它可以让我们编写更加通用、安全、灵活的代码。本文将从以下几个方面为大家详解Java泛型及其应用: 什么是Java泛型 Java泛型的基础语法 Java泛型的应用 示例说明 Java泛型的限制 什么是Java泛型? Java泛型是自JDK 5.0版本(2004年)后推出的一种新特性,它是…

    Java 2023年5月23日
    00
  • java创建一个类实现读取一个文件中的每一行显示出来

    下面是详细的攻略: 创建一个Java类 首先,要在Java中创建一个类来实现读取文件中每一行并显示出来。在这个类中,我们需要使用Java的文件读取API以及循环来逐行读取文件中的内容并将其显示出来。 public class FileReadExample { public static void main(String[] args) { try { //…

    Java 2023年5月19日
    00
  • Jdbc的步骤以及简单实现代码

    JDBC是Java Database Connectivity的缩写,它是一种标准的数据库访问方式,可用于连接各种关系型数据库。 JDBC基本步骤包括以下几个环节: 加载数据库驱动程序:通过导入JDBC驱动包将驱动程序加载进来。 建立数据库连接:通过DriverManager类的getConnection方法连接数据库,返回一个Connection对象。 创…

    Java 2023年5月19日
    00
  • JGroups实现聊天小程序

    以下是关于使用JGroups实现聊天小程序的完整攻略,希望能够帮助您: JGroups实现聊天小程序 介绍 JGroups是一个用于构建群组应用程序的工具包,该工具包允许应用程序中的各个节点之间相互通信和协作。在本教程中,我们将使用JGroups构建一个简单的聊天应用程序。 准备工作 在开始构建JGroups聊天应用程序之前,我们需要首先安装Java和Mav…

    Java 2023年5月23日
    00
  • 详解eclipse下创建第一个spring boot项目

    Eclipse 下创建第一个 Spring Boot 项目的完整攻略 在本文中,我们将详细介绍如何在 Eclipse 下创建第一个 Spring Boot 项目。我们将介绍 Spring Boot 的概念、Eclipse 的配置和使用,并提供两个示例。 Spring Boot 概念 Spring Boot 是一个用于创建独立的、生产级别的 Spring 应用…

    Java 2023年5月15日
    00
  • Java之JsonArray用法讲解

    Java之JsonArray用法讲解 在Java中,经常需要使用Json格式的数据结构进行数据传递和交换。JsonArray是Json中的一个数据类型,本文将讲解JsonArray的用法。 JsonArray是什么? JsonArray是一个有序集合,其中包含了一系列的JsonElement。JsonElement是Json中的基本数据类型,可以是JsonA…

    Java 2023年5月26日
    00
  • Hibernate的各种保存方式的区别详解

    下面是关于Hibernate的各种保存方式的区别详解的完整攻略。 Hibernate的各种保存方式 在Hibernate中,有四种保存方式,分别是:- save()方法- persist()方法- saveOrUpdate()方法- merge()方法 下面将详细介绍它们之间的区别。 save()方法 在Hibernate中,通过save()方法保存一个持久…

    Java 2023年5月19日
    00
  • Java设计模式之装饰者模式详解和代码实例

    Java设计模式之装饰者模式详解和代码实例 什么是装饰者模式? 装饰者模式是一种结构型设计模式,以动态的方式将责任附加到对象上。装饰者提供了与继承相比更为灵活的替代方案,以扩展功能。 装饰者模式的组成 抽象构件(Component):定义装饰者和被装饰者的公共接口。 具体构件(ConcreteComponent):这是被装饰者,这是需要进行功能扩展的对象。 …

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