1、pom.xml
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.11.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
2、springmvc-activemq.xml
<?xml version="1.0" encoding="UTF-8"?><!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 -->
<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://192.168.25.128:61616" />
</bean>
<!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
<bean id="connectionFactory"
class="org.springframework.jms.connection.SingleConnectionFactory">
<!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
<property name="targetConnectionFactory" ref="targetConnectionFactory" />
</bean>
<!-- 配置生产者 -->
<!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
<property name="connectionFactory" ref="connectionFactory" />
</bean>
<!--这个是队列目的地,点对点的 -->
<bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg>
<value>spring-queue_xx</value>
</constructor-arg>
</bean>
<!--这个是主题目的地,一对多的 -->
<bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg value="topic" />
</bean>
<!-- 接收消息 -->
<!-- 配置监听器 -->
<bean id="myMessageListener" class="cn.itcast.listerner.MymessageListerner" />
<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destination" ref="queueDestination" />
<property name="messageListener" ref="myMessageListener" />
</bean>
3、项目中用到
1)消费者package cn.itcast.listerner;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
public class MymessageListerner implements MessageListener {
@Override
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage) message;
try {
String text = textMessage.getText();
System.out.println(text);
} catch (JMSException e) {
e.printStackTrace();
}
}
}
2)生产者
package cn.itcast.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.jms.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller
@RequestMapping("/activemqTest")
public class ActiveMqController {
@Autowired
private JmsTemplate jmsTemplate;
@Autowired
private Destination queueDestination;
@RequestMapping("/send1")
public void sendMessage(HttpServletResponse response) throws IOException {
//发送消息
jmsTemplate.send(queueDestination, new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
//创建一个消息对象并返回
TextMessage textMessage = session.createTextMessage(“kkkkkkkkkk”);
return textMessage;
}
});
response.getWriter().write("kkk");
}
}
4、测试
package cn.itcast.activeTest;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.junit.Test;
import javax.jms.*;
import java.io.IOException;
public class Test1Controller {
@Test
public void test1() throws JMSException {
//1创建一个链接工厂对象,需要指定服务的ip及端口
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.25.128:61616");
//2使用工厂创建connection
Connection connection = factory.createConnection();
//3开启链接
connection.start();
//4创建session对象
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//5创建destination对象
Queue queue = session.createQueue("test-queue");
//6创建生产者
MessageProducer producer = session.createProducer(queue);
/* TextMessage message = new ActiveMQTextMessage();
message.setText("hello activevmq 哈哈");*/
TextMessage textMessage = session.createTextMessage("hello activevmq 哈哈 林成义是 ");
producer.send(textMessage);
//关闭资源
producer.close();
session.close();
connection.close();
}
@Test
public void testQueueConsumer() throws JMSException, IOException {
//1创建一个链接工厂对象,需要指定服务的ip及端口
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.25.128:61616");
//2使用工厂创建connection
Connection connection = factory.createConnection();
//3开启链接
connection.start();
//4创建session对象
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//5创建destination对象
Queue queue = session.createQueue("test-queue");
//6创建消费者
MessageConsumer consumer = session.createConsumer(queue);
//7接收消息
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
//8打印结果
TextMessage textMessage = (TextMessage)message;
String text = null;
try {
text = textMessage.getText();
} catch (JMSException e) {
e.printStackTrace();
}
System.out.println(text);
}
});
//等待接收消息
System.in.read();
//9关闭资源
consumer.close();
session.close();
connection.close();
}
@Test
public void testTopicProducer() throws JMSException {
//1创建一个链接工厂对象,需要指定服务的ip及端口
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.25.128:61616");
//2使用工厂创建connection
Connection connection = factory.createConnection();
//3开启链接
connection.start();
//4创建session对象
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//5创建destination对象,两种queue,topic
Topic topic = session.createTopic("test-topic");
//6创建生产者
MessageProducer producer = session.createProducer(topic);
/* TextMessage message = new ActiveMQTextMessage();
message.setText("hello activevmq 哈哈");*/
TextMessage textMessage = session.createTextMessage("hello topic message 快快快 ");
producer.send(textMessage);
//关闭资源
producer.close();
session.close();
connection.close();
}
@Test
public void testTopicConsumer() throws JMSException, IOException {
//1创建一个链接工厂对象,需要指定服务的ip及端口
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.25.128:61616");
//2使用工厂创建connection
Connection connection = factory.createConnection();
//3开启链接
connection.start();
//4创建session对象
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//5创建destination对象
Topic topic = session.createTopic("test-topic");
//6创建消费者
MessageConsumer consumer = session.createConsumer(topic);
//7接收消息
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
//8打印结果
TextMessage textMessage = (TextMessage)message;
String text = null;
try {
text = textMessage.getText();
} catch (JMSException e) {
e.printStackTrace();
}
System.out.println(text);
}
});
//等待接收消息
System.out.println("topic消费者1启动");
System.in.read();
//9关闭资源
consumer.close();
session.close();
connection.close();
}
@Test
public void testTopicConsumer2() throws JMSException, IOException {
//1创建一个链接工厂对象,需要指定服务的ip及端口
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.25.128:61616");
//2使用工厂创建connection
Connection connection = factory.createConnection();
//3开启链接
connection.start();
//4创建session对象
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//5创建destination对象
Topic topic = session.createTopic("test-topic");
//6创建消费者
MessageConsumer consumer = session.createConsumer(topic);
//7接收消息
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
//8打印结果
TextMessage textMessage = (TextMessage)message;
String text = null;
try {
text = textMessage.getText();
} catch (JMSException e) {
e.printStackTrace();
}
System.out.println(text);
}
});
//等待接收消息
System.out.println("topic消费者2启动");
System.in.read();
//9关闭资源
consumer.close();
session.close();
connection.close();
}
}
2)测试2
package cn.itcast.activeTest;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import javax.jms.*;
import java.io.IOException;
public class Test2Controller {
@Test
public void sendMessage() throws Exception{
//初始化spring容器
//获取jmsTemplate对象
//获取一个destination对象
//发送消息
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:springmvc-activemq.xml");
JmsTemplate template = ac.getBean(JmsTemplate.class);
Destination destination = (Destination)ac.getBean("queueDestination");
//发送消息
template.send(destination, new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
//创建一个消息对象并返回
TextMessage textMessage = session.createTextMessage("spring activemq queue message");
return textMessage;
}
});
}
}