spring集成消息代理ActiveMQ
使用ActiveMQ可以实现可靠的异步消息传递,它是一个流行的开源消息代理(Message Broker),实现了JMS(Java Message Service)规范。下面是基本的步骤和示例,展示如何在Java应用程序中使用ActiveMQ。
下载和安装ActiveMQ
首先,需要下载和安装ActiveMQ。可以从官方网站下载最新版本的ActiveMQ:(https://activemq.apache.org/).
启动ActiveMQ
安装完成后,通过命令行或启动脚本启动ActiveMQ。在命令行中导航到ActiveMQ安装目录的bin
文件夹,然后执行以下命令:
activemq start
启动后可以在浏览器输入:http://127.0.0.1:8161/ 打开ActiveMQ的web控制台。
停止 ActiveMQ 服务:
如果是在 Windows 系统上,可以进入 ActiveMQ 的安装目录的bin
文件夹,然后执行以下命令:
activemq stop
spring中集成ActiveMQ:
引入依赖:
<!-- Spring Core 和 Spring JMS 相关依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>5.3.24</version> <!-- 版本号根据你的实际需求和Spring版本进行调整 --> </dependency> <!-- ActiveMQ 相关依赖 --> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.18.5</version> <!-- 版本号根据你的实际需求和ActiveMQ版本进行调整 --> </dependency>
配置类:
JMS (Java Message Service) 支持两种主要的消息传递模式:
-
点对点(Queue)模式:
-
生产者将消息发送到一个队列。
-
消费者从队列中接收消息。
-
消息被发送到一个特定的队列中,只能由一个消费者接收,确保消息的独占处理。
-
-
发布/订阅(Topic)模式:
-
生产者将消息发布到一个主题。
-
多个消费者可以订阅这个主题并接收消息。
-
消息被广播到所有订阅了该主题的消费者,确保消息的广播处理。
-
这两种模式各有不同的适用场景,根据需求选择合适的模式可以优化消息传递的效率和灵活性。
import org.apache.activemq.ActiveMQConnectionFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.jms.annotation.EnableJms; import org.springframework.jms.config.DefaultJmsListenerContainerFactory; import org.springframework.jms.config.JmsListenerContainerFactory; import org.springframework.jms.core.JmsTemplate; import javax.jms.ConnectionFactory; @Configuration @EnableJms //在 Spring 应用程序中启用 JMS(Java Message Service)相关的功能和配置 @ComponentScan(basePackages = {"com.yc.zy.jms"}) // 扫包 public class JmsConfig { // 配置连接工厂 @Bean public ConnectionFactory connectionFactory() { ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(); connectionFactory.setBrokerURL("tcp://localhost:61616");// ActiveMQ 代理地址 return connectionFactory; } // 配置 JmsTemplate jms模板:消息发送 消息接收 消息转换 连接和会话管理 @Bean public JmsTemplate jmsTemplate(ConnectionFactory connectionFactory) { JmsTemplate jmsTemplate = new JmsTemplate(); jmsTemplate.setConnectionFactory(connectionFactory); // jmsTemplate.setPubSubDomain(true); // 默认为 点对点(Queue)模式 设置为true表示发布/订阅(Topic)模式 return jmsTemplate; } // 配置消息监听器容器工厂 @Bean public JmsListenerContainerFactory<?> jmsListenerContainerFactory(ConnectionFactory connectionFactory) { DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); factory.setConnectionFactory(connectionFactory); // factory.setPubSubDomain(true); // 默认为点对点(Queue)模式 设置为true表示发布/订阅(Topic)模式 return factory; } }
消息生产者:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jms.core.JmsTemplate; import org.springframework.stereotype.Component; @Component public class MessageProducer { @Autowired private JmsTemplate jmsTemplate; // 注入 JmsTemplate 实例 public void sendMessage(String message) { jmsTemplate.convertAndSend("myQueue", message);// 发送消息到队列 System.out.println("发送的消息为: " + message); } }
消息消费者:
import org.springframework.jms.annotation.JmsListener; import org.springframework.stereotype.Component; @Component public class MyMessageListener { @JmsListener(destination = "myQueue") // 监听myQueue消息队列 public void receiveMessage(String message) { System.out.println("用户接收到的消息: " + message); } }
测试:
import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class App { public static void main(String[] args) { ApplicationContext ac = new AnnotationConfigApplicationContext(JmsConfig.class); MessageProducer mp = (MessageProducer) ac.getBean("messageProducer"); mp.sendMessage("Hello, World!"); } }
总结
集成 ActiveMQ 与 Spring 结合使用,可以显著提高消息处理的效率和简化开发过程,同时利用 Spring 提供的功能增强应用程序的灵活性和可靠性。这种集成不仅提升了消息传递的功能,还简化了配置和管理。