当前位置:首页 > 行业动态 > 正文

ActiveMQ结合Spring收发消息

ActiveMQ结合Spring收发消息,需配置连接工厂、队列及监听器等组件。

ActiveMQ是一款流行且功能强大的开源消息中间件,它作为JMS Provider实现了对JMS1.1和J2EE 1.4规范的全面支持,Spring是一个开源的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用,以下是ActiveMQ结合Spring收发消息的具体介绍:

配置环境

添加依赖:在Spring Boot项目的pom.xml文件中添加ActiveMQ和Spring JMS的依赖项,

 <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-activemq</artifactId>
   </dependency>

配置文件:在application.propertiesapplication.yml文件中配置ActiveMQ的连接信息,如:

 spring:
     activemq:
       broker-url: tcp://localhost:61616 # ActiveMQ代理URL
       user: admin # 登录用户名
       password: admin # 登录密码
       pool:
         enabled: true
         max-connections: 10

发送消息

创建消息发送者:创建一个消息发送者组件,用于将消息发送到指定的目的地(队列或主题),可以通过注入JmsTemplate来实现消息的发送,

ActiveMQ结合Spring收发消息

 import org.springframework.beans.factory.annotation.Autowired;
   import org.springframework.jms.core.JmsTemplate;
   import org.springframework.stereotype.Component;
   @Component
   public class MessageSender {
       @Autowired
       private JmsTemplate jmsTemplate;
       public void sendMessage(String destination, String message) {
           jmsTemplate.convertAndSend(destination, message);
       }
   }

调用发送方法:在需要发送消息的地方,注入MessageSender并调用其sendMessage方法,指定目的地和要发送的消息内容。

 import org.springframework.beans.factory.annotation.Autowired;
   import org.springframework.web.bind.annotation.GetMapping;
   import org.springframework.web.bind.annotation.RequestParam;
   import org.springframework.web.bind.annotation.RestController;
   @RestController
   public class MessagingController {
       @Autowired
       private MessageSender messageSender;
       @GetMapping("/send")
       public String send(@RequestParam String destination, @RequestParam String message) {
           messageSender.sendMessage(destination, message);
           return "Message sent!";
       }
   }

接收消息

创建消息监听器:创建一个消息监听器组件,用于从指定的目的地(队列或主题)接收消息,可以使用@JmsListener注解来标识消息监听器方法,

 import org.springframework.jms.annotation.JmsListener;
   import org.springframework.stereotype.Component;
   @Component
   public class MessageReceiver {
       @JmsListener(destination = "queue-name") // 指定监听的目的地名称
       public void receiveMessage(String message) {
           System.out.println("Received message: " + message);
       }
   }

自动接收消息:当有消息发送到指定的目的地时,Spring会自动调用MessageReceiver中的receiveMessage方法来处理接收到的消息,无需手动触发接收操作,只需确保监听器方法处于运行状态即可。

ActiveMQ结合Spring收发消息

示例代码整合

以下是一个简化的完整示例,展示了如何在Spring Boot项目中使用ActiveMQ进行消息的发送和接收:

主应用程序类

 import org.springframework.boot.SpringApplication;
   import org.springframework.boot.autoconfigure.SpringBootApplication;
   @SpringBootApplication
   public class ActivemqSpringApplication {
       public static void main(String[] args) {
           SpringApplication.run(ActivemqSpringApplication.class, args);
       }
   }

配置文件:在src/main/resources/application.yml中配置ActiveMQ连接信息:

 spring:
     activemq:
       broker-url: tcp://localhost:61616
       user: admin
       password: admin
       pool:
         enabled: true
         max-connections: 10

消息发送者组件

ActiveMQ结合Spring收发消息

 import org.springframework.beans.factory.annotation.Autowired;
   import org.springframework.jms.core.JmsTemplate;
   import org.springframework.stereotype.Component;
   @Component
   public class MessageSender {
       @Autowired
       private JmsTemplate jmsTemplate;
       public void sendMessage(String destination, String message) {
           jmsTemplate.convertAndSend(destination, message);
       }
   }

消息监听器组件

 import org.springframework.jms.annotation.JmsListener;
   import org.springframework.stereotype.Component;
   @Component
   public class MessageReceiver {
       @JmsListener(destination = "myQueue") // 假设队列名称为myQueue
       public void receiveMessage(String message) {
           System.out.println("Received message: " + message);
       }
   }

控制器类:用于触发消息发送的HTTP接口:

 import org.springframework.beans.factory.annotation.Autowired;
   import org.springframework.web.bind.annotation.GetMapping;
   import org.springframework.web.bind.annotation.RequestParam;
   import org.springframework.web.bind.annotation.RestController;
   @RestController
   public class MessagingController {
       @Autowired
       private MessageSender messageSender;
       @GetMapping("/send")
       public String send(@RequestParam String message) {
           messageSender.sendMessage("myQueue", message); // 发送消息到myQueue队列
           return "Message sent!";
       }
   }