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.properties
或application.yml
文件中配置ActiveMQ的连接信息,如:
spring: activemq: broker-url: tcp://localhost:61616 # ActiveMQ代理URL user: admin # 登录用户名 password: admin # 登录密码 pool: enabled: true max-connections: 10
创建消息发送者:创建一个消息发送者组件,用于将消息发送到指定的目的地(队列或主题),可以通过注入JmsTemplate
来实现消息的发送,
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
方法来处理接收到的消息,无需手动触发接收操作,只需确保监听器方法处于运行状态即可。
以下是一个简化的完整示例,展示了如何在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
消息发送者组件:
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!"; } }