ActiveMQ整合Spring
(1)导入整合ActiveMQ整合所需要得jar包
<properties>
<activemq.version>5.15.9</activemq.version>
<spring.version>5.2.2.RELEASE</spring.version>
<hutool.version>4.3.1</hutool.version>
<lombok.version>1.18.8</lombok.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>${activemq.version}</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
<version>${activemq.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
(2)创建配置文件application-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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--1.声明连接工厂-->
<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://127.0.0.1:61616"/>
</bean>
</property>
<!--最大连接数-->
<property name="maxConnections" value="100"/>
</bean>
<!--2.声明目的地-->
<!--
点对点模式使用:org.apache.activemq.command.ActiveMQQueue
主题模式使用:org.apache.activemq.command.ActiveMQTopic
-->
<bean id="destinationQueue" class="org.apache.activemq.command.ActiveMQQueue">
<!--使用构造方法的参数注入队列名字-->
<constructor-arg name="name" value="hello-queue"/>
</bean>
<!--3.声明操作MQ的对象jmsTemplate-->
<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>
(3)创建生产者 TestProducer
/**
* 生产类
*/
public class TestProducer{
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("application-activemq.xml");
//从IOC容器里面得到jmsTemplate
JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class);
//jmsTemplate.setDefaultDestination(new ActiveMQQueue("queue-spring")); //重新设置目的地,不使用默认目的地
//发消息
jmsTemplate.send(new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
//创建消息
TextMessage textMessage = session.createTextMessage("MQ-spring");
textMessage.setStringProperty("flag","加急");
return textMessage;
}
});//发送到默认
System.out.println("生产者发送信息成功");
}
}
(4)创建消费类
/**
* 整合消费类
*
*/
public class TestQueueConsumerSpring {
public static void main(String[] args) throws JMSException {
ApplicationContext context = new ClassPathXmlApplicationContext("application-activemq.xml");
JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class);
jmsTemplate.setDefaultDestination(new ActiveMQQueue("queue-spring")); //消费新目的地的消息
//第一种接收方式
// TextMessage textMessage = (TextMessage) jmsTemplate.receive();
// System.out.println("收到的信息:"+textMessage.getText());
//第二种接收方式
Object object = jmsTemplate.receiveAndConvert();
System.out.println("收到的信息:"+object.toString());
}
}
(5)测试
注意:
1.点对点模式(队列模式)
先启动生产者,后启动消费者
2.主题模式
先启动消费者,后启动生产者
配置监听器方式
(1)在application-activemq.xml中添加,一个代表一个消费者
<!--声明一个监听器对象-->
<bean id="mylistener" class="listener.MyListener"/>
<!--设置一个监听容器-->
<bean id="queueListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="jmsFactory"/>
<property name="destination" ref="destinationQueue"/>
<property name="messageListener" ref="mylistener"/>
</bean>
(2)创建生产类
/**
* 生产类
*/
public class TestProducer{
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("application-activemq.xml");
//从IOC容器里面得到jmsTemplate
JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class);
//jmsTemplate.setDefaultDestination(new ActiveMQQueue("queue-spring")); //重新设置目的地,不使用默认目的地
//发消息
jmsTemplate.send(new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
//创建消息
TextMessage textMessage = session.createTextMessage("MQ-spring");
textMessage.setStringProperty("flag","加急");
return textMessage;
}
});//发送到默认
System.out.println("生产者发送信息成功");
}
}
(3)监听输出类
public class MyListener implements MessageListener {
public void onMessage(Message message) {
if(message instanceof TextMessage){
TextMessage textMessage = (TextMessage) message;
try {
System.out.println("监听器收到消息:"+textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}