ActiveMQ与Spring / SpringBoot 整合(四)
1. 对 Spring 的整合
1.1 所需jar 包
<!-- activeMQ jms 的支持 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.3.23.RELEASE</version>
</dependency>
<dependency> <!-- pool 池化包相关的支持 -->
<groupId>org.apache.activemq</gro
upId>
<artifactId>activemq-pool</artifactId>
<version>5.15.9</version>
</dependency>
<!-- aop 相关的支持 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.23.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.23.RELEASE</version>
</dependency>
1.2 写xml 文件 (applicationContext.xml)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://camel.apache.org/schema/spring" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> <context:commponent-scan base-package="com.at.activemq"/> <bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop"> <property name="connectionFactory"> <bean class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://192.168.17.3:61616"></property> </bean> </property> <property name="maxConnections" value="100"></property> </bean> <!-- 队列目的地 --> <bean id="destinationQueue" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg index="0" value="spring-active-queue"></constructor-arg> </bean> <!-- jms 的工具类 --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" ref="jmsFactory"/> <property name="defaultDestination" ref="destinationQueue"/> <property name="messageConverter"> <bean class="org.springframework.jms.support.converter.SimpleMessageConverter"/> </property> </bean> </beans>
1.3 编写代码:
@Service public class SpringMQ_producer { @Autowired private JmsTemplate jmsTemplate; public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); SpringMQ_producer producer = (SpringMQ_producer) ctx.getBean("springMQ_Producer"); producer.jmsTemplate.send((session) -> { TextMessage textMessage = session.createTextMessage("spring 和 activemq 的整合"); return textMessage; }); System.out.println(" *** send task over ***"); } }
@Service public class Spring_MQConsummer { @Autowired private JmsTemplate jmsTemplate; public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); Spring_MQConsummer sm = (Spring_MQConsummer)ac.getBean("spring_MQConsummer"); String s = (String) sm.jmsTemplate.receiveAndConvert(); System.out.println(" *** 消费者消息"+s); } }
并且可以在spring 中设置监听器,不用启动消费者,就可以自动监听到消息,并处理
2. Spring Boot 整合 ActiveMQ
2.1 建立boot 项目,配置 pom.xml 配置 application.yml 配置 bean
2.2 编写生产者 编写启动类 测试类
按键触发消息和定时发送消息的业务代码:
// 调用一次一个信息发出 public void produceMessage(){ jmsMessagingTemplate.convertAndSend(queue,"****"+ UUID.randomUUID().toString().substring(0,6)); } // 带定时投递的业务方法 @Scheduled(fixedDelay = 3000) // 每3秒自动调用 public void produceMessageScheduled(){ jmsMessagingTemplate.convertAndSend(queue,"** scheduled **"+ UUID.randomUUID().toString().substring(0,6)); System.out.println(" produceMessage send ok "); }
对于消息消费者,在以前使用单独的监听器类,编写监听器代码,但是在spring boot 中,使用注解 JmsListener 即可:
@Component public class Queue_consummer { @JmsListener(destination = "${myqueue}") // 注解监听 public void receive(TextMessage textMessage) throws Exception{ System.out.println(" *** 消费者收到消息 ***"+textMessage.getText()); } }
这些是之前(队列)消息发送者发送的消息
2.3 编写消费者项目
2.4 编写主题的消息生产者和消费者项目,运行demo
代码地址:https://github.com/elstic/ActiveMQ