如何通过Spring AOP实现切面间高效通信?

2026-05-19 17:111阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计309个文字,预计阅读时间需要2分钟。

如何通过Spring AOP实现切面间高效通信?

在秒杀微服务中,作者需要在获得各种校验前端的参数后,通过Redis加锁限流(切面A)并返回,最后将订单数据封装推送到RabbitMQ消息队列(切面B)以进行后续工作。问题:如何实现?

如何通过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); } 解决方案

通过参数传递数据,通过捕获异常保证业务逻辑(离谱但有用)

本文共计309个文字,预计阅读时间需要2分钟。

如何通过Spring AOP实现切面间高效通信?

在秒杀微服务中,作者需要在获得各种校验前端的参数后,通过Redis加锁限流(切面A)并返回,最后将订单数据封装推送到RabbitMQ消息队列(切面B)以进行后续工作。问题:如何实现?

如何通过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); } 解决方案

通过参数传递数据,通过捕获异常保证业务逻辑(离谱但有用)