ActiveMQ 简单应用

Posted xiaoliangup

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
            }
              
          }
      }    
        
}
View Code

 

二、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();
        }
        
    }
View Code

 

三、监听器实现,当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();
        
    }

}
View Code

 

四、web.xml中配置监听器

技术分享图片
<listener>
         <listener-class>
             org.tarena.front.listener.ActiveMQinitListener
         </listener-class>
     </listener>
View Code

 

以上是关于ActiveMQ 简单应用的主要内容,如果未能解决你的问题,请参考以下文章

消息队列 ActiveMQ的简单了解以及点对点与发布订阅的方法实现ActiveMQ

activeMQ-简单应用

ActiveMQ简单介绍以及安装

ActiveMQ入门案例以及整合Spring的简单实用

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

关于消息中间件ActiveMQ的企业级应用