springcloud - 비동기 재고 / 비동기 주문

2420 단어 springcloud
MQ 의 역할: 1. 비동기 처리 2. 데이터 삭 봉, 예 를 들 어 초살 업무 제어 요청 수량 3. 로그 처리 4. 응용 디 결합
1: 재고 공제:
  • 제품 시스템:
  • /**
         *            
         * postman :http://localhost:8088/productInfo/koukucun
         *  body-raw :[{"productId":1,"productShuliang":2}]
         */
        @PostMapping("/koukucun")
        @Transactional(rollbackFor=Exception.class)
        public void kouKuCun(@RequestBody List cartDtoList)
        {
            log.info("     :"+cartDtoList);
           //       
            for (CartDto cartDto1:cartDtoList)
            {
                ProductInfo productInfo=iProductInfoService.selectById(cartDto1.getProductId());
                //        
                if(null==productInfo)
                {
                    //     
                    throw new ProductException(ResultEnum.PRODUCT_NOT_EXIST);
                }
                 Integer result= productInfo.getProductStock()-cartDto1.getProductShuliang();
                //        
                if (result<0)
                {
                    //    
                    throw new ProductException(ResultEnum.KUCUN_NOT_EHIGHT);
                }
                //             
                productInfo.setProductId(cartDto1.getProductId());
                productInfo.setProductStock(result);
                   //           
                Boolean is= iProductInfoService.updateById(productInfo);
                if(is)
                {
                    log.info("     ");
                    //  mq  
                    //       json
                    String productJson = JSON.toJSONString(productInfo);
                    jmsMessagingTemplate.convertAndSend(queue,productJson);
                    log.info("  mq    !");
                }
                else
                {
                    log.info("     ");
                }
    
            }
        }
    

    2. 주문 시스템
    package com.zhu.order.listener;
    
    import org.springframework.jms.annotation.JmsListener;
    import org.springframework.messaging.handler.annotation.SendTo;
    import org.springframework.stereotype.Component;
    
    @Component
    public class QueueListener {
    
        @JmsListener(destination = "publish.queue2", containerFactory = "jmsListenerContainerQueue")
        public String receive(String text){
            System.out.println("QueueListener: consumer-a       : " + text);
    
            // json       
            //  redis
    
            return "consumer-a received : " + text;
    
        }
    }
    
    

    좋은 웹페이지 즐겨찾기