springcloud--异步扣库存/异步下单

MQ的作用:
1.异步处理
2.流量削峰 比如秒杀业务 控制请求数量
3.日志处理
4.应用解耦

一:扣库存:

  1. product系统:
/**
     * 扣库存 给订单服务调用
     * 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;

    }
}

你可能感兴趣的:(springcloud)