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>

原文地址:https://www.cnblogs.com/xiaoliangup/p/9363938.html

时间: 2024-11-07 01:30:51

ActiveMQ 简单应用的相关文章

深入浅出JMS(三)--ActiveMQ简单的HelloWorld实例

第一篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点. 第二篇博文深入浅出JMS(二)–ActiveMQ简单介绍以及安装,我们介绍了消息中间件ActiveMQ,安装,启动,以及优缺点. 这篇博文,我们使用ActiveMQ为大家实现一种点对点的消息模型.如果你对点对点模型的认识较浅,可以看一下第一篇博文的介绍. JMS其实并没有想象的那么高大上,看完这篇博文之后,你就知

ActiveMQ 简单介绍以及安装

一直知道这个jms,却没有机会用到.今天玩玩! 为什么要学习,使用JMS 在JAVA中,如果两个应用程序之间对各自都不了解,甚至这两个程序可能部署在不同的大洲上,那么它们之间如何发送消息呢?举个例子,一个应用程序A部署在印度,另一个应用程序部署在美国,然后每当A触发某件事后,B想从A获取一些更新信息.当然,也有可能不止一个B对A的更新信息感兴趣,可能会有N个类似B的应用程序想从A中获取更新的信息.在这种情况下,JAVA提供了最佳的解决方案-JMS,完美解决了上面讨论的问题.JMS同样适用于基于事

ActiveMQ简单简绍(“点对点通讯”和 “发布订阅模式”)

ActiveMQ简单简绍 MQ简介: MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们.消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术.排队指的是应用程序通过队列来通信.队列的使用除去了接收和发送应用程序同时执行的要求.其中较为成熟的MQ产品有IBMWEBSPHERE MQ. MQ特点: M

深入浅出JMS(二)--ActiveMQ简单介绍以及安装

现实的企业中,对于消息通信的应用一直都非常的火热,而且在J2EE的企业应用中扮演着特殊的角色,所以对于它研究是非常有必要的. 上篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了消息通信的规范JMS,我们这篇博文介绍一款开源的JMS具体实现--ActiveMQ.ActiveMQ是一个易于使用的消息中间件. 消息中间件 我们简单的介绍一下消息中间件,对它有一个基本认识就好,消息中间件(MOM:Message Orient middleware). 消息中间件有很多的用途和优点: 1. 将数据从

ActiveMQ简单入门

一.创建一个简单的Hello World案例 首先需要导入activemq-all-5.14.5.jar包,写生产端: package com.ietree.mq.helloworld; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.DeliveryMode; import javax.jms.Destination; import javax.jms.MessageProduc

ActiveMQ简单实现之一对一生产和消费

第一步: 下载ActiveMQ工具包 url:http://activemq.apache.org 第二部解压并启动: 全家福 启动方式: 注 不要直接启动bin目录下的bat  按系统版本启动相应的bat  比如我的是64位 启动完毕 进入控制台  默认地址 http://127.0.0.1:8161/admin   账号admin密码admin 第三部:创建java工程简单实现简单单点发布和消费 导入activemq-all-xxx.jar 创建消息生产者类Producer.java pac

ActiveMQ简单介绍以及安装

概述 首先简单的介绍一下MQ,MQ英文名MessageQueue,中文名也就是大家用的消息队列,干嘛用的呢,说白了就是一个消息的接受和转发的容器,可用于消息推送. ActiveMQ是Apache所提供的一个开源的消息系统,完全采用Java来实现,因此,它能很好地支持J2EE提出的JMS(Java Message Service,即Java消息服务)规范.JMS是一组Java应用程序接口,它提供消息的创建.发送.读取等一系列服务.JMS提供了一组公共应用程 序接口和响应的语法,类似于Java数据库

深入浅出JMS(二)--ActiveMQ简单介绍

现实的企业中,对于消息通信的应用一直都非常的火热,而且在J2EE的企业应用中扮演着特殊的角色,所以对于它研究是非常有必要的. 上篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了消息通信的规范JMS,我们这篇博文介绍一款开源的JMS具体实现--ActiveMQ.ActiveMQ是一个易于使用的消息中间件. 消息中间件 我们简单的介绍一下消息中间件,对它有一个基本认识就好,消息中间件(MOM:Message Orient middleware). 消息中间件有很多的用途和优点: 1. 将数据从

【转】深入浅出JMS(二)--ActiveMQ简单介绍以及安装

现实的企业中,对于消息通信的应用一直都非常的火热,而且在J2EE的企业应用中扮演着特殊的角色,所以对于它研究是非常有必要的. 这篇博文介绍一款开源的JMS具体实现——ActiveMQ.ActiveMQ是一个易于使用的消息中间件. 消息中间件 我们简单的介绍一下消息中间件,对它有一个基本认识就好,消息中间件(MOM:Message Orient middleware). 消息中间件有很多的用途和优点: 1. 将数据从一个应用程序传送到另一个应用程序,或者从软件的一个模块传送到另外一个模块: 2.