欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring?AOPr如何打通兩個(gè)切面之間的通信

 更新時(shí)間:2022年03月30日 08:18:41   作者:miozus  
本文主要介紹了Spring?AOPr如何打通兩個(gè)切面之間的通信,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

場(chǎng)景描述

在秒殺微服務(wù)中,筆者在需要各種校驗(yàn)前端傳來(lái)的參數(shù)后,通過(guò) Redis 加鎖限流(切面A)并返回,最后封裝訂單數(shù)據(jù)推送到 RabbitMQ 消息隊(duì)列(切面B)做善后工作。

問(wèn)題:如何將 切面 A 的數(shù)據(jù)傳遞 給切面B 處理呢?

/**
 * 添加到秒殺流程
 *
 * @param killId 秒殺商品緩存鍵 sessionId_skuId
 * @param key    隨機(jī)碼 randomCode
 * @param num    數(shù)量
 * @return {@link R}
 */
@GetMapping("/kill")
public R addToSeckill(
        @RequestParam("killId") String killId,
        @RequestParam("key") String key,
        @RequestParam("num") Integer num) {
    // 實(shí)現(xiàn)類只是帶有兩個(gè)注解方法,返回 null(因?yàn)槿拷唤o切面托管了)
    String orderSn = seckillService.kill(killId, key, num);
    if (StringUtils.isEmpty(orderSn)) {
        return R.error();
    }
    return R.ok().setData(orderSn);
}

解決方案

通過(guò)參數(shù)傳遞數(shù)據(jù),通過(guò)捕獲異常保證業(yè)務(wù)邏輯(離譜但有用) ??

// 強(qiáng)制修改參數(shù),通過(guò)異常返回正常流程,而通過(guò)AOP消息隊(duì)列處理收尾動(dòng)作
try {
    return pjp.proceed(new Object[]{orderTo, null, null});
} catch (Throwable e) {
    return orderSn;
}

注意事項(xiàng):

  • 參數(shù)一致性:必須偽造和方法簽名的數(shù)量相等的參數(shù) ⇒ 否則線程會(huì)拋出異常 I 就返回了,無(wú)法執(zhí)行 pjp.proceed 原始方法 ⇒ 無(wú)法跳轉(zhuǎn)第二個(gè)切面
    java.lang.IllegalArgumentException: Expecting 3 arguments to proceed, but was passed 1 arguments

  • 捕獲異常不拋出,直接執(zhí)行正常業(yè)務(wù)邏輯 ⇒ 否則線程將吞沒異常 II
    cn.miozus.gulimall.common.to.mq.SeckillOrderTo cannot be cast to java.lang.String

3.雖然兩個(gè)切面都返回了 orderSn ,實(shí)際最終只有切面A傳遞到了控制層和前端, 切面B的返回值成了擺設(shè)。

跳轉(zhuǎn)過(guò)程

打斷點(diǎn)查看兩個(gè)切面的跳轉(zhuǎn)過(guò)程。

切面A:準(zhǔn)備跳轉(zhuǎn)第二個(gè)切面

切面B:發(fā)送消息完成

打印日志,可見場(chǎng)景需求,已經(jīng)滿足了。

2022-03-29 17:32:56.521 INFO 7904 --- [io-25000-exec-8] c.m.g.s.aspect.SeckillRabbitMqAspect : 快速創(chuàng)建訂單:發(fā)送消息創(chuàng)建完成: 202203291732444881508738921192005634 2022-03-29 17:33:01.526 INFO 7904 --- [io-25000-exec-8] c.m.g.s.controller.SeckillController : 秒殺創(chuàng)建訂單用時(shí):28778 ?? seckill orderSn = 202203291732444881508738921192005634 2022-03-29 17:33:01.527 INFO 7904 --- [nectionFactory5] c.m.g.s.config.RabbitMqSeckillConfig : ?? 消息已發(fā)送, params: correlationData:null,ack:true,cause:null

其他方案

最簡(jiǎn)單的辦法,不切了,兩個(gè)切面耦合在一起。注入和調(diào)用方法

到此這篇關(guān)于Spring AOPr如何打通兩個(gè)切面之間的通信的文章就介紹到這了,更多相關(guān)Spring AOP  切面通信內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java基礎(chǔ)MAC系統(tǒng)下IDEA連接MYSQL數(shù)據(jù)庫(kù)JDBC過(guò)程

    Java基礎(chǔ)MAC系統(tǒng)下IDEA連接MYSQL數(shù)據(jù)庫(kù)JDBC過(guò)程

    最近一直在學(xué)習(xí)web項(xiàng)目,當(dāng)然也會(huì)涉及與數(shù)據(jù)庫(kù)的連接這塊,這里就總結(jié)一下在IDEA中如何進(jìn)行MySQL數(shù)據(jù)庫(kù)的連接,這里提一下我的電腦是MAC系統(tǒng),使用的編碼軟件是IDEA,數(shù)據(jù)庫(kù)是MySQL
    2021-09-09
  • Java環(huán)境中MyBatis與Spring或Spring MVC框架的集成方法

    Java環(huán)境中MyBatis與Spring或Spring MVC框架的集成方法

    和MyBatis類似,Spring或者Spring MVC框架在Web應(yīng)用程序的運(yùn)作中同樣主要負(fù)責(zé)處理數(shù)據(jù)庫(kù)事務(wù),這里我們就來(lái)看一下Java環(huán)境中MyBatis與Spring或Spring MVC框架的集成方法
    2016-06-06
  • Spring Security Remember me使用及原理詳解

    Spring Security Remember me使用及原理詳解

    這篇文章主要介紹了Spring Security Remember me使用及原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java添加事件監(jiān)聽的四種方法代碼實(shí)例

    Java添加事件監(jiān)聽的四種方法代碼實(shí)例

    這篇文章主要介紹了Java添加事件監(jiān)聽的四種方法代碼實(shí)例,本文直接給出代碼示例,并用注釋說(shuō)明,需要的朋友可以參考下
    2014-09-09
  • nacos客戶端一致性hash負(fù)載需求實(shí)現(xiàn)

    nacos客戶端一致性hash負(fù)載需求實(shí)現(xiàn)

    這篇文章主要介紹了nacos客戶端一致性hash負(fù)載的需求實(shí)現(xiàn)過(guò)程及步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • springboot如何解決非controller類引用service的問(wèn)題

    springboot如何解決非controller類引用service的問(wèn)題

    這篇文章主要介紹了springboot如何解決非controller類引用service的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Spring為什么不推薦使用@Autowired注解詳析

    Spring為什么不推薦使用@Autowired注解詳析

    @Autowired 注解的主要功能就是完成自動(dòng)注入,使用也非常簡(jiǎn)單,但這篇文章主要給大家介紹了關(guān)于Spring為什么不推薦使用@Autowired注解的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • 使用純Java實(shí)現(xiàn)一個(gè)WebSSH項(xiàng)目的示例代碼

    使用純Java實(shí)現(xiàn)一個(gè)WebSSH項(xiàng)目的示例代碼

    這篇文章主要介紹了使用純Java實(shí)現(xiàn)一個(gè)WebSSH項(xiàng)目,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Java過(guò)濾器Filter詳解

    Java過(guò)濾器Filter詳解

    這篇文章主要介紹了java過(guò)濾器中Filter,發(fā)送請(qǐng)求時(shí),如果有不符合的信息將會(huì)被filter進(jìn)行攔截,如果符合則會(huì)進(jìn)行放行。如果感興趣可以來(lái)學(xué)習(xí)一下
    2021-08-08
  • 解決mybatis-generator生成Mapper文件沒有Selective結(jié)尾的問(wèn)題

    解決mybatis-generator生成Mapper文件沒有Selective結(jié)尾的問(wèn)題

    這篇文章主要介紹了解決mybatis-generator生成Mapper文件沒有Selective結(jié)尾的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09

最新評(píng)論