admin 发表于 2022-3-29 18:41:55

【Spring AOP】暴力打通两个切面之间的通信

场景描述
在秒杀微服务中,笔者在需要各种校验前端传来的参数后,通过 Redis 加锁限流(切面A)并返回,最后封装订单数据推送到 RabbitMQ 消息队列(切面B)做善后工作。

问题:如何将 切面 A 的数据传递 给切面B 处理呢?
/**
* 添加到秒杀流程
*
* @param killId 秒杀商品缓存键 sessionId_skuId
* @param key    随机码 randomCode
* @param num    数量
* @return {@link R}
*/
@GetMapping("/kill")
public R addToSeckill(
      @RequestParam("killId") String killId,
      @RequestParam("key") String key,
      @RequestParam("num") Integer num) {
    // 实现类只是带有两个注解方法,返回 null(因为全部交给切面托管了)
    String orderSn = seckillService.kill(killId, key, num);
    if (StringUtils.isEmpty(orderSn)) {
      return R.error();
    }
    return R.ok().setData(orderSn);
}


解决方案
通过参数传递数据,通过捕获异常保证业务逻辑(离谱但有用)
页: [1]
查看完整版本: 【Spring AOP】暴力打通两个切面之间的通信