Spring整合ActiveMQ所需的重要jar包(原本使用5.15.1的activemq-all的jar包,结果和4.1.4的spring-context冲突)
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.13.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-messaging</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
spring-cfg.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"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:jms="http://www.springframework.org/schema/jms"
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://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/jms
http://www.springframework.org/schema/jms/spring-jms.xsd
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core.xsd
"
>
<!--默认mq链接工厂 默认用户密码 admin-->
<amq:connectionFactory brokerURL="tcp://localhost:61616" userName="admin" password="admin"
id="amqConnectionFactory" />
<!--整合jms-->
<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="amqConnectionFactory"/>
<property name="sessionCacheSize" value="10"/>
</bean>
<!--队列JmsTemplate-->
<bean id="queueTemplate" class="org.springframework.jms.core.JmsTemplate">
<constructor-arg ref="connectionFactory"/>
<!--是否是发布订阅 false 为队列,true 为发布订阅-->
<property name="pubSubDomain" value="false"/>
</bean>
<!--订阅JmsTemplate-->
<bean id="topicTemplate" class="org.springframework.jms.core.JmsTemplate">
<constructor-arg ref="connectionFactory"/>
<!--是否是发布订阅 false 为队列,true 为发布订阅-->
<property name="pubSubDomain" value="true"/>
</bean>
<!--队列消费者 destination为目标地址 ref参考类可自行定义后创建接收类-->
<jms:listener-container destination-type="queue" connection-factory="connectionFactory">
<jms:listener destination="zyt.com.queue" ref="queueReceicer1"/>
<jms:listener destination="zyt.com.queue" ref="queueReceicer2"/>
</jms:listener-container>
<!--订阅消费者-->
<jms:listener-container destination-type="topic" connection-factory="connectionFactory">
<jms:listener destination="zyt.com.topic" ref="topicReceicer1"/>
<jms:listener destination="zyt.com.topic" ref="topicReceicer2"/>
</jms:listener-container>
</beans>
队列和发布订阅 发送类
package zyt.com.user.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Component;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
@Component
public class QueueSender {
//注入spring-cfg中配置的bean @Autowired + @Qualifier = @Resource(j2ee提供)
@Autowired
@Qualifier("queueTemplate")
private JmsTemplate jmsTemplate;
public void send(String queueName, final String message){
jmsTemplate.send(queueName, new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
//消息类型自行选择 这边采用TextMessage
return session.createTextMessage(message);
}
});
}
}
package zyt.com.user.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Component;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
@Component
public class TopicSender {
@Autowired
@Qualifier("topicTemplate")
private JmsTemplate jmsTemplate;
public void send(String queueName, final String message){
jmsTemplate.send(queueName, new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(message);
}
});
}
}
接收类
package zyt.com.user.service;
import org.springframework.stereotype.Component;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
@Component("queueReceicer1")
public class QueueReceicer1 implements MessageListener{
@Override
public void onMessage(Message message) {
try {
System.out.println("queueReceicer1---接收到:"+((TextMessage)message).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
package zyt.com.user.service;
import org.springframework.stereotype.Component;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
@Component("queueReceicer2")
public class QueueReceicer2 implements MessageListener{
@Override
public void onMessage(Message message) {
try {
System.out.println("queueReceicer2---接收到:"+((TextMessage)message).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
package zyt.com.user.service;
import org.springframework.stereotype.Component;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
@Component
public class TopicReceicer1 implements MessageListener{
@Override
public void onMessage(Message message) {
try {
System.out.println("topicReceicer1---接收到:"+((TextMessage)message).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
package zyt.com.user.service;
import org.springframework.stereotype.Component;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
@Component
public class TopicReceicer2 implements MessageListener {
@Override
public void onMessage(Message message) {
try {
System.out.println("topicReceicer2---接收到:"+((TextMessage)message).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
测试Controller
@Controller
@RequestMapping("user")
public class UserController {
@Autowired
private QueueSender queueSender;
@Autowired
private TopicSender topicSender;
@RequestMapping("/send")
public String send(){
queueSender.send("zyt.com.queue","queueTest");
topicSender.send("zyt.com.topic","topicTest");
return "test";
}
}
控制台输出结果
至此整合成功~~~~~~~~~编程虐我千百遍,奈何我爱她如初恋~~~~~