最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

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

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


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

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

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

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

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

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

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

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

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

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

就是有3個(gè)服務(wù),用戶服務(wù),博客服務(wù),評(píng)論服務(wù)

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

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

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

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

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

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

集合服務(wù)層也就是上面那位同學(xué)說(shuō)的是不是需要有一個(gè)統(tǒng)一的工程來(lái)做組裝服務(wù)的事情,這個(gè)就是說(shuō)我們博客服務(wù)還是提供基礎(chǔ)的博客信息,單獨(dú)加一個(gè)業(yè)務(wù)的聚合服務(wù)用來(lái)組裝這些信息統(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());
 // 獲取評(píng)論信息
 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)盡量簡(jiǎn)單,只轉(zhuǎn)發(fā),增加聚合服務(wù)層是不錯(cuò)的選擇。

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

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

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

總結(jié)

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

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

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

相關(guān)文章

  • Java concurrency線程池之線程池原理(四)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java concurrency線程池之線程池原理(四)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了Java concurrency線程池之線程池原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 淺析從同步原語(yǔ)看非阻塞同步以及Java中的應(yīng)用

    淺析從同步原語(yǔ)看非阻塞同步以及Java中的應(yīng)用

    非阻塞同步是基于沖突檢測(cè)的樂(lè)觀并發(fā)策略,這種樂(lè)觀的并發(fā)策略使得很多線程不需要因?yàn)楦?jìng)爭(zhēng)失敗直接掛起,這種同步措施稱為非阻塞同步。下面我們就從硬件原語(yǔ)開(kāi)始了解非阻塞同步,并看一看在Java中非阻塞同步的一些應(yīng)用
    2021-06-06
  • SpringBoot整合Mybatis實(shí)現(xiàn)CRUD

    SpringBoot整合Mybatis實(shí)現(xiàn)CRUD

    這篇文章主要介紹了SpringBoot整合Mybatis實(shí)現(xiàn)CRUD的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • JAVA多線程線程安全性基礎(chǔ)

    JAVA多線程線程安全性基礎(chǔ)

    這篇文章主要介紹了如何測(cè)試Java類的線程安全性,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 適用于Java程序員的10道XML面試題 新鮮出爐

    適用于Java程序員的10道XML面試題 新鮮出爐

    這篇文章主要為大家詳細(xì)介紹了Java程序員的10道XML面試題,感興趣的小伙伴們可以參考一下
    2016-07-07
  • SpringBoot2.6.3集成quartz的方式

    SpringBoot2.6.3集成quartz的方式

    quartz是java里頭定時(shí)任務(wù)的經(jīng)典開(kāi)源實(shí)現(xiàn),這里講述一下如何在SpringBoot2.6.3集成quartz,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2022-02-02
  • java調(diào)用微信現(xiàn)金紅包接口的心得與體會(huì)總結(jié)

    java調(diào)用微信現(xiàn)金紅包接口的心得與體會(huì)總結(jié)

    這篇文章主要介紹了java調(diào)用微信現(xiàn)金紅包接口的心得與體會(huì)總結(jié),有需要的朋友可以了解一下。
    2016-11-11
  • 詳解Java中KMP算法的圖解與實(shí)現(xiàn)

    詳解Java中KMP算法的圖解與實(shí)現(xiàn)

    KMP算法是一種神奇的字符串匹配算法,在對(duì)超長(zhǎng)字符串進(jìn)行模板匹配的時(shí)候比暴力匹配法的效率會(huì)高不少。本文將利用圖解為大家詳細(xì)講解KMP算法的實(shí)現(xiàn),需要的可以參考一下
    2022-05-05
  • JVM的垃圾回收機(jī)制你了解嗎

    JVM的垃圾回收機(jī)制你了解嗎

    這篇文章主要為大家介紹了JVM的垃圾回收機(jī)制,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • 詳解配置類為什么要添加@Configuration注解

    詳解配置類為什么要添加@Configuration注解

    這篇文章主要介紹了詳解配置類為什么要添加@Configuration注解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評(píng)論

峨眉山市| 泊头市| 景宁| 七台河市| 天等县| 兰西县| 长海县| 泰顺县| 罗田县| 白城市| 台南县| 潼南县| 静安区| 新津县| 客服| 桂阳县| 中牟县| 乌审旗| 灵山县| 响水县| 个旧市| 安庆市| 乌海市| 晋江市| 米脂县| 延吉市| 漯河市| 沅陵县| 徐闻县| 海晏县| 清原| 竹北市| 响水县| 襄汾县| 巴彦淖尔市| 雷波县| 正安县| 阳山县| 原阳县| 民权县| 柳河县|