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 ...
随机推荐
- lucene反向索引——倒排表无论是文档号及词频,还是位置信息,都是以跳跃表的结构存在的
转自:http://www.cnblogs.com/forfuture1978/archive/2010/02/02/1661436.html 4.2. 反向信息 反向信息是索引文件的核心,也即反向索 ...
- Bean Shell常用内置变量
JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下: log:写入信息到jmeber.log文件,使用方法:log.info( ...
- 知乎面试【五轮技术+HR】
今年下半年去知乎面试了两次,讲道理来说,知乎有CD期, 一旦上一次面试没有通过.在一段时间内,不能再次面试知乎.后来在同事的内推下,再次获得面试机会,哈哈~~,这次面试时间还是挺长的,特记录一下. 7 ...
- js的鼠标右键简单菜单
实现点击鼠标右键时出来菜单代码如下: 主要运用oncontextmenu事件,oncontextmenu 事件在元素中用户右击鼠标时触发并打开上下文菜单. <!DOCTYPE html> ...
- mkfs格式化分区(为分区写入文件系统)
mkfs 命令非常简单易用,不过是不能调整分区的默认参数的(比如块大小是 4096 Bytes),这些默认参数除非特殊清况,否则不需要调整.如果想要调整,就需要使用 mke2fs 命令重新格式化.命令 ...
- python pip 安装插件权限问题及 指定pip国内镜像源
- vue实现滚动条滚到相应高度触发动画的操作
一.vue项目引入animate.css 第一步:在命令行中执行: npm install animate.css --save 第二步:引入及使用: main.js中: import animate ...
- Docs-.NET-C#-指南-语言参考-预处理器指令:#else(C# 参考)
ylbtech-Docs-.NET-C#-指南-语言参考-预处理器指令:#else(C# 参考) 1.返回顶部 1. #else(C# 参考) 2015/07/20 #else 允许创建复合条件指令, ...
- VMware vSphere Client中启动虚拟机提示No boot filename received/Operating System not found解决方法
昨天下载安装 .NET Framework 3.5 SP1解决了VMware vSphere Client安装问题后,今天需要远程连接服务器搭建一台虚拟机. 根据指引步骤进行下一步.下一步的操作完成后 ...
- Ionic4.x 中的 UI 组件(UI Components)表单相关组件
1.ion-input 单行文本框 2.ion-toggle 开关 3.ion-radio-group.ion-radio 单选按钮组 4.ion-checkbox 多选按钮组 5.ion-selec ...