ActiveMQ 简单应用
ActiveMQ简单应用到复杂的订单模块,提高前台的访问速度。
一、当提交订单后,发送消息给ActiveMQ。
@Service
public class JmsSend { private static ConnectionFactory connectionFactory =new ActiveMQConnectionFactory("failover:(tcp://192.168.174.104:61616,tcp://192.168.174.104:61676)?randomize=false"); private static Connection connection; static { try {
connection = connectionFactory.createConnection(); connection.start(); } catch (JMSException e) { e.printStackTrace();
} } public void sendMsg(Integer customerUuid){
Session session=null; try{ session=connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); Destination queue=session.createQueue("MY_ORDER_QUEUE"); MessageProducer producer=session.createProducer(queue); TextMessage message=session.createTextMessage(customerUuid+""); producer.send(message); session.commit(); }catch(Exception e){ }finally{ try {
session.close();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
} }
二、ActiveMQ消息接收端接收到消息,处理订单具体业务
@Service
public class JmsReceiver { private static ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
"failover:(tcp://192.168.174.104:61616,tcp://192.168.174.104:61676)?randomize=false"); private static Connection connection; @Autowired
private ICartService ics = null; @Autowired
private IStoreService iss = null; @Autowired
private IOrderService ios = null; @Autowired
private IOrderDetailService iods = null; static { try {
connection = connectionFactory.createConnection(); connection.start(); } catch (JMSException e) { e.printStackTrace();
} } public void acceptMsg(){ try {
final Session session = connection.createSession(Boolean.TRUE,
Session.AUTO_ACKNOWLEDGE); Destination queue = session.createQueue("MY_ORDER_QUEUE"); MessageConsumer consumer = session.createConsumer(queue); consumer.setMessageListener(new MessageListener() { public void onMessage(Message message) { TextMessage msg = (TextMessage) message;
Integer customerUuid =null;
try {
customerUuid = Integer.valueOf(msg.getText());
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} CartQueryModel cqm = new CartQueryModel();
cqm.getPage().setPageShow(1000);
cqm.setCustomerUuid(customerUuid); Page<CartQueryModel> page = ics.getByConditionPage(cqm);
float totalMoney = 0.0f;
for (CartModel cart : page.getResult()) {
totalMoney += 10;
} OrderModel order = new OrderModel();
order.setCustomerUuid(customerUuid);
order.setOrderTime(DateFormatHelper.long2str(System.currentTimeMillis()));
order.setSaveMoney(0f);
order.setTotalMoney(totalMoney);
order.setState(1);
ios.create(order); OrderQueryModel oqm = new OrderQueryModel();
oqm.setOrderTime(order.getOrderTime());
oqm.setCustomerUuid(customerUuid);
Page<OrderQueryModel> orderPage = ios.getByConditionPage(oqm);
order = orderPage.getResult().get(0); for (CartModel cart : page.getResult()) {
OrderDetailModel orderDetail = new OrderDetailModel();
orderDetail.setGoodsUuid(cart.getGoodsUuid());
orderDetail.setOrderUuid(order.getUuid());
orderDetail.setOrderNum(cart.getBuyNum());
orderDetail.setPrice(10.0f);
orderDetail.setMoney(orderDetail.getPrice()
* orderDetail.getOrderNum());
orderDetail.setSaveMoney(0.0f); iods.create(orderDetail); StoreModel store = iss.getByGoodsUuid(cart.getGoodsUuid());
StoreModel storeModel = new StoreModel();
store.setStoreNum(store.getStoreNum() - cart.getBuyNum());
iss.update(store); ics.delete(cart.getUuid()); } try {
session.commit();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }); }catch(Exception e){
e.printStackTrace();
} }
三、监听器实现,当web启动时,开启消息监听。
public class ActiveMQinitListener implements ServletContextListener{
public void contextDestroyed(ServletContextEvent arg0) {
WebApplicationContext wac=WebApplicationContextUtils.getWebApplicationContext(arg0.getServletContext());
JmsReceiver receiver=(JmsReceiver) wac.getBean("jmsReceiver");
Connection conn=receiver.getConnection();
try {
conn.close();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void contextInitialized(ServletContextEvent arg0) {
WebApplicationContext wac=WebApplicationContextUtils.getWebApplicationContext(arg0.getServletContext());
JmsReceiver receiver=(JmsReceiver) wac.getBean("jmsReceiver");
receiver.acceptMsg();
}
}
四、web.xml中配置监听器
<listener>
<listener-class>
org.tarena.front.listener.ActiveMQinitListener
</listener-class>
</listener>
ActiveMQ 简单应用的更多相关文章
- 深入浅出JMS(三)--ActiveMQ简单的HelloWorld实例
第一篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点. 第二篇博文深入 ...
- JMS【三】--ActiveMQ简单的HelloWorld实例
第一篇博文JMS[一]--JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点. 第二篇博文JMS[二 ...
- 深入浅出JMS(二)--ActiveMQ简单介绍以及安装
现实的企业中,对于消息通信的应用一直都非常的火热,而且在J2EE的企业应用中扮演着特殊的角色,所以对于它研究是非常有必要的. 上篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了消息通信的规范JM ...
- JMS【二】--ActiveMQ简单介绍以及安装
现实的企业中,对于消息通信的应用一直都非常的火热,而且在J2EE的企业应用中扮演着特殊的角色,所以对于它研究是非常有必要的. 上篇博文JMS[一]--JMS基本概念,我们介绍了消息通信的规范JMS,我 ...
- ActiveMQ简单介绍以及安装
概述 首先简单的介绍一下MQ,MQ英文名MessageQueue,中文名也就是大家用的消息队列,干嘛用的呢,说白了就是一个消息的接受和转发的容器,可用于消息推送. ActiveMQ是Apache所提供 ...
- ActiveMQ简单介绍及安装
消息中间件 我们简单的介绍一下消息中间件,对它有一个基本认识就好,消息中间件(MOM:Message Orient middleware). 消息中间件有很多的用途和优点: 1. 将数据从一个应用程序 ...
- JMS消息队列之ActiveMQ简单示例
废话不多说,在进入主题前先看一张图,对ActiveMQ有个大体的了解: 下面进入主题: 1.添加需要的maven依赖 <!-- active mq begin --> < ...
- 【转】深入浅出JMS(三)--ActiveMQ简单的HelloWorld实例
这篇博文,我们使用ActiveMQ为大家实现一种点对点的消息模型.如果你对点对点模型的认识较浅,可以看一下第一篇博文的介绍. JMS其实并没有想象的那么高大上,看完这篇博文之后,你就知道什么叫简单,下 ...
- 【转】深入浅出JMS(二)--ActiveMQ简单介绍以及安装
现实的企业中,对于消息通信的应用一直都非常的火热,而且在J2EE的企业应用中扮演着特殊的角色,所以对于它研究是非常有必要的. 这篇博文介绍一款开源的JMS具体实现——ActiveMQ.ActiveMQ ...
随机推荐
- 关于Vmvare虚拟机中Linux系统不能全屏的问题
安装虚拟机后并加载ubuntu后,发现界面一直是正方形的,真是神了. 但是当时沉迷学习,这点小细节并没有什么影响,就没有管它. 嗯.... 现在,为了追求完美,是时候让它全屏了,可无论怎样搞,怎样百度 ...
- Access the value of a member expression
Access the value of a member expression 解答1 You can compile and invoke a lambda expression whose bod ...
- (四)OpenCV-Python学习—形态学处理
通过阈值化分割可以得到二值图,但往往会出现图像中物体形态不完整,变的残缺,可以通过形态学处理,使其变得丰满,或者去除掉多余的像素.常用的形态学处理算法包括:腐蚀,膨胀,开运算,闭运算,形态学梯度,顶帽 ...
- PyTorch Tutorials 3 Neural Networks
%matplotlib inline Neural Networks 使用torch.nn包来构建神经网络. 上一讲已经讲过了autograd,nn包依赖autograd包来定义模型并求导. 一个nn ...
- OpenJudge计算概论-最高的分数
/*======================================================== 最高的分数 总时间限制: 1000ms 内存限制: 65536kB 描述 孙老师 ...
- API 设计 POSIX File API
小结: 1. https://mp.weixin.qq.com/s/qWrSyzJ54YEw8sLCxAEKlA API 设计最佳实践的思考 谷朴 阿里技术 昨天 阿里妹导读:API 是模块或者子 ...
- 猎豹网校C++ Primer学习笔记2
14.数组 数组定义时的长度必须是在编译时就能确定的值. 全局数组会自动初始化为0. size_t 15.指针 其指向类型要相同. 指针和引用: 指针可以先不初始化,可以修改指向.有指针的指针. 16 ...
- SQL 模糊查询条件的四种匹配模式
转: 执行数据库查询时,有完整查询和模糊查询之分. 一般模糊语句格式如下: SELECT 字段 FROM 表 WHERE 某字段 LIKE 条件; 其中,关于条件,SQL提供了四种匹配模式: 1.%: ...
- Web聊天室的实现
Tornado普通方式实现聊天室 普通的http方式连接的话,基本思路是前端页面通过JS重复连接后端服务器. 核心文件:app.py #!/usr/bin/env python # -*- codin ...
- 浅析 c# Queue
1.Queue定义 System.Collections.Queue类表示对象的先进先出集合,存储在 Queue(队列) 中的对象在一端插入,从另一端移除. 2.优点 1.能对集合进行顺序处理(先进先 ...