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 ...
随机推荐
- JAVA基础知识|synchronized和lock
一.synchronized 是jvm的一个关键字,使用过程均由jvm控制 有三种使用方式: 修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁 修饰代码块,同方法 修饰静态方法,作用 ...
- 关于Kernel的思考
学习播客_KLDA(推导得很通俗,下面的推导就是源于此篇博客) 第一部分:按照自己的理解,模仿抄!学习播客来完成一下KLDA的推导. 第二部分:对于Kernel的思考 KLDA:顾名思义,就是把Ker ...
- easyUI的datagrid表格的使用
实现easyUI表格的里面数据的增删改查功能.SQL使用Oracle和mybatis. 话不多说,直接上代码. 首先是前段部分的. var session = GetSession(); var pa ...
- Linux 基于WEB开源的系统管理工具webmin
Webmin是目前功能最强大的基于Web的Unix系统管理工具.管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作.目前Webmin支持绝大多数的Unix系统,这些系统除了各种版本的l ...
- 一个读取C#特性Description方法(zhuan)
class Program { static void Main(string[] args) { string str= DB.write.ToDescription(); Console.Writ ...
- PropertyValuesHolder学习
package com.loaderman.customviewdemo; import android.animation.ObjectAnimator; import android.animat ...
- 论文翻译 DOTA:A Large-scale Dataset for Object Detection in Aerial Images
简介:武大遥感国重实验室-夏桂松和华科电信学院-白翔等合作做的一个航拍图像数据集 摘要: 目标检测是计算机视觉领域一个重要且有挑战性的问题.虽然过去的十几年中目标检测在自然场景已经有了较重要的成就 ...
- python 中的一些基础算法:递归/冒泡/选择/插入
递归算法 如果一个函数包含了对自己的调用,那么这个函数就是递归的. 比如我们计算下1-7乘法的计算: def func(n): if n ==1 : return 1 return n*func(n- ...
- WPF窗体应用程序开发
1.Window:登录窗口.主窗体.消息框 2.UserControl:业务界面.消息框(如果使用UC来实现,则需要做特殊的处理,比如中断功能如何处理?)(显示一个UC,必须将其添加到容器中,所以&l ...
- 从成员函数指针生成可调用对象:function<>、mem_fn()和bind()
我们知道,普通函数指针是一个可调用对象,但是成员函数指针不是可调用对象.因此,如果我们想在一个保存string的vector中找到第一个空string,不能这样写: vector<string& ...