(1)、解压windows版本的ActiveMQ到非中文目录下
(2)、启动
(3)、浏览器访问
(1)、创建java项目,导入jar包
(2)、编写生产者代码
package cn.itcast.activemq.test;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
/**
* 消息生产者
* @author Administrator
*
*/
public class JMSProducer {
// 默认连接用户名
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
// 默认连接密码
private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
// 默认连接地址
private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;
// 发送的消息数量
private static final int SENDNUM = 10;
public static void main(String[] args) {
// 连接工厂
ConnectionFactory connectionFactory;
// 连接
Connection connection = null;
// 会话 接受或者发送消息的线程
Session session;
// 消息的目的地
Destination destination;
// 消息生产者
MessageProducer messageProducer;
// 实例化连接工厂
connectionFactory = new ActiveMQConnectionFactory(JMSProducer.USERNAME, JMSProducer.PASSWORD,
JMSProducer.BROKEURL);
try {
// 通过连接工厂获取连接
connection = connectionFactory.createConnection();
// 启动连接
connection.start();
// 创建session
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
// 创建一个名称为HelloWorld的消息队列
destination = session.createQueue("HelloWorld");
// 创建消息生产者
messageProducer = session.createProducer(destination);
// 发送消息
sendMessage(session, messageProducer);
session.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection != null) {
try {
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
/**
* 发送消息
*
* @param session
* @param messageProducer
* 消息生产者
* @throws Exception
*/
public static void sendMessage(Session session, MessageProducer messageProducer) throws Exception {
for (int i = 0; i < JMSProducer.SENDNUM; i++) {
// 创建一条文本消息
TextMessage message = session.createTextMessage("ActiveMQ 发送消息" + i);
System.out.println("发送消息:Activemq 发送消息" + i);
// 通过消息生产者发出消息
messageProducer.send(message);
}
}
}
(3)、编写消费者代码
package cn.itcast.activemq.test;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
/**
* 消息消费者
* @author Administrator
*
*/
public class JMSConsumer {
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;// 默认连接用户名
private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;// 默认连接密码
private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;// 默认连接地址
public static void main(String[] args) {
ConnectionFactory connectionFactory;// 连接工厂
Connection connection = null;// 连接
Session session;// 会话 接受或者发送消息的线程
Destination destination;// 消息的目的地
MessageConsumer messageConsumer;// 消息的消费者
// 实例化连接工厂
connectionFactory = new ActiveMQConnectionFactory(JMSConsumer.USERNAME, JMSConsumer.PASSWORD,
JMSConsumer.BROKEURL);
try {
// 通过连接工厂获取连接
connection = connectionFactory.createConnection();
// 启动连接
connection.start();
// 创建session
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 创建一个连接HelloWorld的消息队列
destination = session.createQueue("HelloWorld");
// 创建消息消费者
messageConsumer = session.createConsumer(destination);
while (true) {
TextMessage textMessage = (TextMessage) messageConsumer.receive(100000);
if (textMessage != null) {
System.out.println("收到的消息:" + textMessage.getText());
} else {
break;
}
}
} catch (JMSException e) {
e.printStackTrace();
}
}
}
(4)、直接启动提供者和消费者即可测试运行
(5)、编写消息监听器接收消息
package cn.itcast.activemq.test;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.junit.Test;
/**
* 消息监听器测试类
* @author Administrator
*
*/
public class JMSConsumerListenerTest {
@Test
public void testConsumer() throws JMSException {
ConnectionFactory connectionFactory;// 连接工厂
Connection connection = null;// 连接
Session session;// 会话 接受或者发送消息的线程
Destination destination;// 消息的目的地
MessageConsumer messageConsumer;// 消息的消费者
// 实例化连接工厂
connectionFactory = new ActiveMQConnectionFactory(BROKEURL);
// 通过连接工厂获取连接
connection = connectionFactory.createConnection();
// 启动连接
connection.start();
// 创建session
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 创建一个连接HelloWorld的消息队列
destination = session.createQueue("HelloWorld");
// 创建消息消费者
messageConsumer = session.createConsumer(destination);
messageConsumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
try {
System.out.println(((TextMessage) message).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
while (true) {
}
}
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;// 默认连接用户名
private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;// 默认连接密码
private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;// 默认连接地址
}
(1)、创建jar包方式的maven工程,导入pom.xml中的jar包坐标
4.0.0
com.itheima.maven
activeMQ_spring
0.0.1-SNAPSHOT
junit
junit
4.12
org.springframework
spring-core
4.1.7.RELEASE
org.springframework
spring-jms
4.1.7.RELEASE
org.apache.activemq
activemq-all
5.2.0
org.springframework
spring-test
4.1.7.RELEASE
org.apache.xbean
xbean-spring
4.2
(2)、编写生产者代码
queue方式:
package cn.itcast.activemq.producer.queue;
import java.util.Map;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.Session;
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;
/**
*
* @description 队列消息生产者,发送消息到队列
*
*/
@Component("queueSender")
public class QueueSender {
@Autowired
@Qualifier("jmsQueueTemplate")
private JmsTemplate jmsTemplate;// 通过@Qualifier修饰符来注入对应的bean
/**
* 发送一条消息到指定的队列(目标)
*
* @param queueName
* 队列名称
* @param message
* 消息内容
*/
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);
}
});
}
public void send(String queueName, final Map map) {
jmsTemplate.send(queueName, new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
MapMessage message = session.createMapMessage();
for (String key : map.keySet()) {
message.setString(key, map.get(key));
}
return message;
}
});
}
}
topic方式:
package cn.itcast.activemq.producer.topic;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
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;
/**
*
* @description Topic生产者发送消息到Topic
*
*/
@Component("topicSender")
public class TopicSender {
@Autowired
@Qualifier("jmsTopicTemplate")
private JmsTemplate jmsTemplate;
/**
* 发送一条消息到指定的队列(目标)
*
* @param queueName
* 队列名称
* @param message
* 消息内容
*/
public void send(String topicName, final String message) {
jmsTemplate.send(topicName, new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(message);
}
});
}
}
(3)、编写消费者代码
Queue方式:
package cn.itcast.activemq.consumer.queue;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import org.springframework.stereotype.Component;
/**
*
* @description 队列消息监听器
*
*/
@Component
public class QueueReceiver1 implements MessageListener {
@Override
public void onMessage(Message message) {
try {
System.out.println("QueueReceiver1接收到消息:" + ((TextMessage) message).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
package cn.itcast.activemq.consumer.queue;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import org.springframework.stereotype.Component;
/**
*
* @description 队列消息监听器
*
*/
@Component
public class QueueReceiver2 implements MessageListener {
@Override
public void onMessage(Message message) {
try {
System.out.println("QueueReceiver2接收到消息:" + ((TextMessage) message).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
package cn.itcast.activemq.consumer.queue;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageListener;
import org.springframework.stereotype.Component;
/**
*
* @description 队列消息监听器
*
*/
@Component
public class QueueReceiver3 implements MessageListener {
@Override
public void onMessage(Message message) {
try {
System.out.println("QueueReceiver3接收到消息:" + ((MapMessage) message).getString("company"));
} catch (JMSException e) {
e.printStackTrace();
}
}
}
Topic方式:
package cn.itcast.activemq.consumer.topic;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import org.springframework.stereotype.Component;
/**
*
* @description Topic消息监听器
*
*/
@Component
public class TopicReceiver1 implements MessageListener {
@Override
public void onMessage(Message message) {
try {
System.out.println("TopicReceiver1接收到消息:" + ((TextMessage) message).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
package cn.itcast.activemq.consumer.topic;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import org.springframework.stereotype.Component;
/**
*
* @description Topic消息监听器
*
*/
@Component
public class TopicReceiver2 implements MessageListener {
@Override
public void onMessage(Message message) {
try {
System.out.println("TopicReceiver2接收到消息:" + ((TextMessage) message).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
(4)、编写spring配置文件
(5)、编写测试类
package cn.itcast.activemq.test;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import cn.itcast.activemq.producer.queue.QueueSender;
import cn.itcast.activemq.producer.topic.TopicSender;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext-mq.xml")
public class ActiveMQTest {
@Autowired
private QueueSender queueSender;
@Autowired
private TopicSender topicSender;
@Test
public void testMQ() {
queueSender.send("test.queue", "Hello,Queue");
topicSender.send("test.topic", "Hello,Topic");
Map map = new HashMap<>();
map.put("company", "传智播客");
queueSender.send("test.map", map);
while (true) {
// 持续执行 ,让监听器 有时间接收信息
}
}
}
bos_sms
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:applicationContext.xml
package com.itheima.consumer;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageListener;
/**
* 消息监听类
* @author Administrator
*
*/
public class MsgConsumer implements MessageListener {
//当监听到消息之后,onMessage方法会自动执行
public void onMessage(Message message) {
MapMessage mapMessage = (MapMessage) message;
//从消息对象中获取数据
try {
String telephone = mapMessage.getString("telephone");
String msg = mapMessage.getString("msg");
System.out.println("成功的接收到了提供者发送的消息:" + telephone + " : " +msg);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Insert title here
package com.itheima.bos.web.action.take_delivery;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.itheima.bos.domain.take_delivery.WayBill;
import com.itheima.bos.service.take_delivery.WayBillService;
import com.itheima.bos.web.action.common.CommonAction;
/**
* 工单动作类
* @author Administrator
*
*/
@Controller
@Namespace("/")
@ParentPackage("struts-default")
@Scope("prototype")
public class WayBillAction extends CommonAction {
@Autowired
private WayBillService service;
@Action(value="waybillAction_save")
public String save() throws Exception{
String flag = "1";
try {
service.save(model);
} catch (Exception e) {
e.printStackTrace();
flag = "0";
}
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=utf-8");
response.getWriter().print(flag);
return NONE;
}
}
package com.itheima.bos.service.take_delivery.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.itheima.bos.dao.take_delivery.WayBillDao;
import com.itheima.bos.domain.take_delivery.WayBill;
import com.itheima.bos.service.take_delivery.WayBillService;
@Service
@Transactional
public class WayBillServiceImpl implements WayBillService {
@Autowired
private WayBillDao dao;
public void save(WayBill model) {
dao.save(model);
}
}
package com.itheima.bos.dao.take_delivery;
import org.springframework.data.jpa.repository.JpaRepository;
import com.itheima.bos.domain.take_delivery.WayBill;
public interface WayBillDao extends JpaRepository {
}