亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring Cloud實(shí)現(xiàn)提供API給客戶端的方法詳解

 更新時間:2018年01月05日 08:40:45   作者:尹吉?dú)g  
這篇文章主要給大家介紹了關(guān)于Spring Cloud實(shí)現(xiàn)提供API給客戶端的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

現(xiàn)在越來越多的公司開始擁抱Spring Cloud了,Spring Boot做為下一代 web 框架,Spring Cloud 作為最新最火的微服務(wù)的翹楚,你還有什么理由拒絕。很多Java方向的同學(xué)也開始積極的學(xué)習(xí)Spring Cloud,其實(shí)這邊還有一個問題就是說:雖然大家學(xué)了Eureka,Ribbon,Hystrix,Zuul,F(xiàn)eign等等,但是要運(yùn)用到實(shí)際的項(xiàng)目中去還是有些難度的。

微服務(wù)難就難在服務(wù)的拆分上,框架只是工具,很多人都會用,服務(wù)拆分,服務(wù)之間的關(guān)系這些都是在拆分時候需要考慮的事情。

今天就有一位同學(xué)給我發(fā)郵件,咨詢我下面2個問題:


下面以我自己的經(jīng)驗(yàn)來做一些解答,僅供參考:

關(guān)于第一個問題中的API是各個微服務(wù)下的Controller?

我們所說的API其實(shí)就是一個接口,大部分都是用Spring MVC方式去開發(fā)的,也就是Controller中的一個加了注解的方法,注解就是我們常用的那幾個:

  • @RequestMapping
  • @GetMapping
  • @PostMapping
  • @PutMapping
  • @DeleteMapping

關(guān)于第一個問題中的是否需要統(tǒng)一的一個工程,在里面封裝其他微服務(wù)的controller?

這種其實(shí)也沒有固定的模式,大部分是直接通過API網(wǎng)關(guān)轉(zhuǎn)發(fā)到你的業(yè)務(wù)服務(wù)上

以猿天地這樣的博客網(wǎng)站的業(yè)務(wù)類舉例:

有一個業(yè)務(wù)功能,當(dāng)我查看具體的博客文章的時候,需要返回的信息如下:

  • 博文標(biāo)題
  • 發(fā)布時間
  • 作者
  • 標(biāo)簽
  • 閱讀數(shù)量
  • 評論信息
  • 作者信息(昵稱,介紹)

這個時候我們這個查看文章的接口其實(shí)就涉及到了3部分的數(shù)據(jù),文章本身的信息,評論信息,作者的信息

就是有3個服務(wù),用戶服務(wù),博客服務(wù),評論服務(wù)

那么問題來了,涉及到多個服務(wù)之前的交互,其實(shí)跟上面那位同學(xué)問我的是一樣的問題,是否需要統(tǒng)一工程,組裝其他服務(wù)?是否可以相互調(diào)用?

這種的話我推薦2種實(shí)現(xiàn)方式:

一. API網(wǎng)關(guān)直接轉(zhuǎn)發(fā)到博客服務(wù)中

我們這個API就是一個獲取博文信息的接口,主體肯定是博客服務(wù),在博客服務(wù)中有一個博文信息的接口,在接口中去調(diào)用用戶服務(wù)提供的用戶信息接口,還要去調(diào)用評論服務(wù)中博文的評論信息,下面看偽代碼:

@GetMapping("/blog/detail/{id}")
public BlogInfo blogInfo(@PathVariable("id") Long id) {
 // 獲取博客信息
 Blog blog = blogService.getById(id);
 // 獲取用戶信息
 UserInfo userInfo = userFeignClient.getUserInfo(blog.getUserId());
 // 獲取評論信息
 CommentInfo commentInfo = commentFeignClient.getCommentInfo(id); 
 return 組裝所有信息返回。 
}

二.增加聚合服務(wù)層

集合服務(wù)層也就是上面那位同學(xué)說的是不是需要有一個統(tǒng)一的工程來做組裝服務(wù)的事情,這個就是說我們博客服務(wù)還是提供基礎(chǔ)的博客信息,單獨(dú)加一個業(yè)務(wù)的聚合服務(wù)用來組裝這些信息統(tǒng)一返回給調(diào)用方,偽代碼如下:

@GetMapping("/blog/detail/{id}")
public BlogInfo blogInfo(@PathVariable("id") Long id) {
 // 獲取博客信息
 Blog blog = blogFeignClient.getById(id);
 // 獲取用戶信息
 UserInfo userInfo = userFeignClient.getUserInfo(blog.getUserId());
 // 獲取評論信息
 CommentInfo commentInfo = commentFeignClient.getCommentInfo(id); 
 return 組裝所有信息返回。 
}

數(shù)據(jù)都是遠(yuǎn)程調(diào)用的,當(dāng)然這邊你可以并行去調(diào)用,還有一種方式就是聚合操作在API網(wǎng)關(guān)中進(jìn)行,這種方案也是可行的,我建議還是不要在網(wǎng)關(guān)中做,API網(wǎng)關(guān)盡量簡單,只轉(zhuǎn)發(fā),增加聚合服務(wù)層是不錯的選擇。

如果你的服務(wù)治理是用dubbo構(gòu)建的,聚合服務(wù)層也是比較好的方法,將dubbo服務(wù)聚合統(tǒng)一提供http接口給外部調(diào)用。

三.調(diào)用方自行去獲取各個數(shù)據(jù)

還有一種方式的話就是調(diào)用方自己去分別調(diào)用博客接口,評論接口,用戶接口,這樣的話接口只需要關(guān)注自己本身的數(shù)據(jù),把組裝的問題交給的使用方,這種一般用的比較少,最好是一次性將要用的數(shù)據(jù)返回給調(diào)用方,反復(fù)調(diào)用特別是在移動端,請求太多了,浪費(fèi)流量。

總結(jié)

至于要怎么去組裝數(shù)據(jù),還是得你自己來定,可以將組裝放在對應(yīng)的業(yè)務(wù)服務(wù)中,也可以單獨(dú)增加一個聚合服務(wù)來組裝,也可以讓客戶端自己去組裝。

服務(wù)之間肯定是可以相互調(diào)用的,要是不能相互調(diào)用,那么你拆開還有什么意義,用Feign來調(diào)用服務(wù)接口,你就把它當(dāng)做Service之間的調(diào)用即可。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 一文了解Java中record和lombok的使用對比

    一文了解Java中record和lombok的使用對比

    Java的 record 關(guān)鍵字是Java 14中引入的一個新的語義特性。Lombok 是一個Java庫,可以自動生成一些已知的模式為Java字節(jié)碼。本文我們將探討各種使用情況,包括java record 的一些限制。對于每個例子,我們將看到Lombok如何派上用場,并比較這兩種解決方案
    2022-07-07
  • Java for循環(huán)的妙用之雞兔同籠問題

    Java for循環(huán)的妙用之雞兔同籠問題

    這篇文章主要給大家介紹了關(guān)于Java for循環(huán)的妙用之雞兔同籠問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • java?stream實(shí)現(xiàn)分組BigDecimal求和以及自定義分組求和

    java?stream實(shí)現(xiàn)分組BigDecimal求和以及自定義分組求和

    這篇文章主要給大家介紹了關(guān)于java?stream實(shí)現(xiàn)分組BigDecimal求和以及自定義分組求和的相關(guān)資料,Stream是Java8的一大亮點(diǎn),是對容器對象功能的增強(qiáng),它專注于對容器對象進(jìn)行各種非常便利、高效的聚合操作或者大批量數(shù)據(jù)操作,需要的朋友可以參考下
    2023-12-12
  • 解決IDEA Gradle構(gòu)建報(bào)錯''Cause: zip END header not found''

    解決IDEA Gradle構(gòu)建報(bào)錯''Cause: zip END header not found''

    這篇文章主要介紹了解決IDEA Gradle構(gòu)建報(bào)錯"Cause: zip END header not found"的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • springboot定時任務(wù)SchedulingConfigurer異步多線程實(shí)現(xiàn)方式

    springboot定時任務(wù)SchedulingConfigurer異步多線程實(shí)現(xiàn)方式

    這篇文章主要介紹了springboot定時任務(wù)SchedulingConfigurer異步多線程實(shí)現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Java實(shí)現(xiàn)HttpGet請求傳body參數(shù)

    Java實(shí)現(xiàn)HttpGet請求傳body參數(shù)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)HttpGet請求傳body參數(shù)的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • Spring?MVC中的常用注解及用法小結(jié)

    Spring?MVC中的常用注解及用法小結(jié)

    這篇文章主要介紹了Spring?MVC中的常用注解及其用法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • java并發(fā)包JUC同步器框架AQS框架原文翻譯

    java并發(fā)包JUC同步器框架AQS框架原文翻譯

    發(fā)現(xiàn)了一篇JDK作者的論文《The?java.util.concurrent?Synchronizer?Framework》主要描述了作者對AbstractQueuedSynchronizer同步器框架的設(shè)計(jì)和實(shí)現(xiàn)。權(quán)威性毋庸置疑!自然需要拜讀一下,配上中文翻譯,希望大家能有所收獲
    2022-02-02
  • 利用java制作簡單的音樂播放器

    利用java制作簡單的音樂播放器

    這篇文章主要為大家詳細(xì)介紹了利用java的swing技術(shù)制作簡單的音樂播放器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • java?spring?validation?自動、手動校驗(yàn)

    java?spring?validation?自動、手動校驗(yàn)

    HibernateValidator簡化了Java開發(fā)中的參數(shù)校驗(yàn)過程,提供自動和手動兩種校驗(yàn)方式,通過引入相關(guān)依賴并使用@Validated注解,可以實(shí)現(xiàn)自動校驗(yàn),手動校驗(yàn)則需要使用ValidatorUtils類,此方法有效減少代碼重復(fù),提高開發(fā)效率
    2024-09-09

最新評論