Spring整合ActiveMQ,实现队列主题消息生产消费
1、引入依赖
pom.xml
1 <!-- activemq --> 2 <dependency> 3 <groupId>org.springframework</groupId> 4 <artifactId>spring-jms</artifactId> 5 <version>4.3.23.RELEASE</version> 6 </dependency> 7 8 <dependency> 9 <groupId>org.apache.activemq</groupId> 10 <artifactId>activemq-pool</artifactId> 11 <version>5.15.9</version> 12 </dependency>
2、配置属性文件(配置文件也要加入到spring配置管理中)
activemq.properties
activemq_url=tcp://192.168.0.102:61616 activemq_username=admin activemq_password=admin
3、在com.activemq包下增加监听类
MyMessageListener.java (队列、主题消费者接收代码)
package com.activemq;
import org.springframework.stereotype.Component;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
/**
* 自定义监听类
* 记得加上注解@Component
* @author 。
*/
@Component
public class MyMessageListener implements MessageListener {
@Override
public void onMessage(Message message) {
if (null!=message && message instanceof TextMessage){
TextMessage textMessage= (TextMessage) message;
try {
System.out.println(textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
4、编写配置文件(需要把该配置加入Spring管理中,这里不再说明)
spring-activemq.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://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd "> <context:annotation-config/> <!--扫描类所在位置--> <context:component-scan base-package="com.activemq"/> <!-- 读取配置文件 --> <bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <array> <!-- activemq.properties所在文件路径--> <value>/WEB-INF/config/activemq.properties</value> </array> </property> </bean> <!--配置生产者--> <bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop"> <property name="connectionFactory"> <!--真正可以产生Connection的ConnectionFactory,由对应的jms服务厂商提供--> <bean class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="${activemq_url}"/> <!--连接的账号密码,没有密码可以不写--> <property name="userName" value="${activemq_username}"/> <property name="password" value="${activemq_password}"/> </bean> </property> <!--最大连接数--> <property name="maxConnections" value="100"></property> </bean> <!--这个是队列目的地,点对点的--> <bean id="destinationQueue" class="org.apache.activemq.command.ActiveMQQueue"> <!--queue是对应名字,这里根据自己的填写--> <constructor-arg index="0" value="queue"/> </bean> <!--这个是主题--> <bean id="destinationTopic" class="org.apache.activemq.command.ActiveMQTopic"> <constructor-arg index="0" value="topic"/> </bean> <!--Spring提供的JMS工具类,进行消息发送、接收--> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" ref="jmsFactory"/> <!-- 这里的值destinationQueue对应上面的<bean id="destinationQueue" 如果这里的值写 destinationQueue 表示是队列 如果这里的值写 destinationTopic 表示这个是主题 以上可以根据具体的需要更改 --> <property name="defaultDestination" ref="destinationQueue"/> <property name="messageConverter"> <!--消息类型的转换--> <bean class="org.springframework.jms.support.converter.SimpleMessageConverter"/> </property> </bean> <!--配置监听程序,只需要启动生产者 消费者不用启动,自动会监听记录--> <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="jmsFactory"/> <!-- 这里的值destinationQueue对应上面的<bean id="destinationQueue" 如果这里的值写 destinationQueue 表示是队列消费监听 如果这里的值写 destinationTopic 表示这个是主题消费监听 以上可以根据具体的需要更改 --> <property name="destination" ref="destinationQueue"/> <!--myMessageListener是在上面配置的base-package="com.activemq" 包下的监听类--> <property name="messageListener" ref="myMessageListener"/> </bean> </beans>
3、队列、主题生产者生产代码 (不可直接使用,这是伪代码,需根据具体情况自行调用send()里面的 jmsTemplate.send 代码方法)
package com.queue.activemq; import org.springframework.jms.core.JmsTemplate; import org.springframework.web.context.ContextLoader; import org.springframework.web.context.WebApplicationContext; import javax.jms.TextMessage; public class Produce { private JmsTemplate jmsTemplate; public void send() { WebApplicationContext webctx = ContextLoader.getCurrentWebApplicationContext(); this.jmsTemplate = (JmsTemplate) webctx.getBean("jmsTemplate"); /*队列生产者*/ jmsTemplate.send(session1 -> { TextMessage textMessage = session1.createTextMessage("发送的消息内容"); return textMessage; }); } }
-----------------------有任何问题可以在评论区评论,也可以私信我,我看到的话会进行回复,欢迎大家指教------------------------
(蓝奏云官网有些地址失效了,需要把请求地址lanzous改成lanzoux才可以)