很多activemq的功能要看官方文档或者博客,这些功能大多是在上面代码的基础上修改完善的。如果非要把这些功能强行整合到spring,就有些缘木求鱼了。而另一种方式整合spring更好,就是将上面的类注入到Spring中,其他不变。这样既能保持原生的代码,又能集成到spring。
下面我们讲的Spring和SpringBoot整合ActiveMQ也重要,它给我们提供了一个模板,简化了代码,减少我们工作中遇到坑,能够满足开发中90%以上的功能。
**pom.xml添加依赖 **
<dependencies> <!-- ActiveMQ 所需要的jar包--> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.15.9</version> </dependency> <!-- ActiveMQ 和 Spring 整合的基础包 --> <dependency> <groupId>org.apache.xbean</groupId> <artifactId>xbean-spring</artifactId> <version>3.16</version> </dependency> <!-- 嵌入式ActiveMQ --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.10.1</version> </dependency> <!-- Spring对JMS的支持,整合Spring和ActiveMQ --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>5.2.1.RELEASE</version> </dependency> <!-- ActiveMQ连接池 --> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-pool</artifactId> <version>5.15.10</version> </dependency> <!-- Spring核心依赖 --> <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> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.3.23.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>4.3.23.RELEASE</version> </dependency> <!-- junit/log4j等基础配置 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>Spring的ActiveMQ配置文件
src/main/resources/spring-activemq.cml
<?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://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/context/spring-context.xsd"> <!-- 开启包的自动扫描 --> <context:component-scan base-package="com.polaris"/> <!-- 配置生产者 --> <bean destroy-method="stop"> <property> <!-- 真正可以生产Connection的ConnectionFactory,由对应的JMS服务商提供 --> <bean> <property value="tcp://mpolaris.top:61616"/> </bean> </property> <property value="100"/> </bean> <!-- 这个是队列目的地,点对点的Queue --> <bean> <!-- 通过构造注入Queue名 --> <constructor-arg index="0" value="spring-active-queue"/> </bean> <!-- 这个是主题目的地, 发布订阅的主题Topic--> <bean> <constructor-arg index="0" value="spring-active-topic"/> </bean> <!-- Spring提供的JMS工具类,他可以进行消息发送,接收等 --> <bean> <!-- 传入连接工厂 --> <property ref="connectionFactory"/> <!-- 传入目的地 --> <property ref="destinationQueue"/> <!-- 消息自动转换器 --> <property> <bean/> </property> </bean> </beans>队列生产者
@Service public class JmsProduce { @Autowired private JmsTemplate jmsTemplate; public static void main(String[] args) { ApplicationContext ioc = new ClassPathXmlApplicationContext("spring-activemq.xml"); JmsProduce produce = (JmsProduce) ioc.getBean("jmsProduce"); produce.jmsTemplate.send(new MessageCreator() { @Override public Message createMessage(Session session) throws JMSException { TextMessage message = session.createTextMessage("====> Spring和ActiveMQ的整合情况"); return message; } }); System.out.println("Send task over!"); } }