1、jar包
<!-- spring-jms 依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<!-- activemq依赖 -->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.9.1</version>
</dependency>
<dependency>
<groupId>org.apache.xbean</groupId>
<artifactId>xbean-spring</artifactId>
<version>4.6</version>
</dependency>
2、配置文件
(1)activemq-producer.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:jms="http://www.springframework.org/schema/jms"
xmlns:amq="http://activemq.apache.org/schema/core"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.3.xsd
http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
<!-- 配置ActiveMQConnectionFactory连接工厂对象 -->
<amq:connectionFactory id="amqConnectionFactory" brokerURL="tcp://192.168.111.128:61616" userName="admin" password="admin"/>
<!-- 配置connectionFactory的连接池信息 -->
<bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory">
<property name="connectionFactory" ref="amqConnectionFactory"></property>
<property name="maxConnections" value="10"></property>
</bean>
<!-- 带有缓存功能的连接工厂,Session缓存大小可配置 -->
<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="pooledConnectionFactory"></property>
<property name="sessionCacheSize" value="100"></property>
</bean>
<!-- 配置JmsTemplate -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<!-- 给定连接工厂, 必须是spring创建的连接工厂. -->
<property name="connectionFactory" ref="connectionFactory"></property>
<!-- 可选 - 默认目的地命名 -->
<!-- <property name="defaultDestinationName" value="simple_queue"></property>-->
<!-- pubSubDomain 为true表示发布订阅模式;false表示点对点模式 -->
<property name="pubSubDomain" value="true"/>
</bean>
<!--这个是队列目的地,点对点的,仅有两个构造函数一个无参一个带String-->
<bean id="queue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="spring.activemq.queue"/>
</bean>
<!--这个是主题目的地,一对多的,仅有两个构造函数一个无参一个带String -->
<bean id="topic1" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg value="topic"/>
</bean>
(2) activemq-listener.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:mvc="http://www.springframework.org/schema/mvc" 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/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core.xsd
http://www.springframework.org/schema/jms
http://www.springframework.org/schema/jms/spring-jms.xsd">
<!-- 消息监听器 -->
<!-- queue消费者 -->
<bean id="listener" class="mail.controller.TestConsumer"/>
<!-- topic消费者 -->
<bean id="listener1" class="mail.listener.TestConsumer1"/>
<bean id="listener2" class="mail.listener.TestConsumer2"/>
<!-- Queue监听器 -->
<jms:listener-container destination-type="queue"
container-type="default" connection-factory="connectionFactory"
acknowledge="auto">
<jms:listener destination="queue" ref="listener" />
</jms:listener-container>
<!-- Topic监听器 -->
<jms:listener-container destination-type="topic"
container-type="default" connection-factory="connectionFactory"
acknowledge="auto">
<jms:listener destination="topic" ref="listener1" />
<jms:listener destination="topic" ref="listener2" />
</jms:listener-container>
3、生产证代码
public class TestPorducer {
@Autowired
private JmsTemplate jmsTemplate;
@RequestMapping("sendmsg.do")
public String send(@RequestParam("msg") final String message) {
System.out.println("发送消息---->"+message);
jmsTemplate.send(new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(message);
}
});
return "ok";
}
/**
* 动态的目的地
* @param destinationName
* @param message
* @return
*/
@RequestMapping("sendmsg1.do")
public String send1(String destinationName,@RequestParam("msg") final String message) {
System.out.println("发送消息---->"+message+";目的地---->"+destinationName);
jmsTemplate.send(destinationName,new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(message);
}
});
return "ok";
}
}
4、消费者代码
public class TestConsumer1 implements MessageListener {
@Override
public void onMessage(Message message) {
// myQueueB的消费者
try {
String text = ((TextMessage) message).getText();
System.out.println(this.getClass().getSimpleName() + "发布订阅1----接受到消息---->" + text);
} catch (JMSException e) {
e.printStackTrace();
}
}
}