一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring Cloud實現提供API給客戶端的方法詳解

Spring Cloud實現提供API給客戶端的方法詳解

2021-03-15 12:15尹吉歡 Java教程

這篇文章主要給大家介紹了關于Spring Cloud實現提供API給客戶端的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。

前言

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

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

今天就有一位同學給我發郵件,咨詢我下面2個問題:

Spring Cloud實現提供API給客戶端的方法詳解

下面以我自己的經驗來做一些解答,僅供參考:

關于第一個問題中的API是各個微服務下的Controller?

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

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

關于第一個問題中的是否需要統一的一個工程,在里面封裝其他微服務的controller?

這種其實也沒有固定的模式,大部分是直接通過API網關轉發到你的業務服務上

以猿天地這樣的博客網站的業務類舉例:

有一個業務功能,當我查看具體的博客文章的時候,需要返回的信息如下:

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

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

就是有3個服務,用戶服務,博客服務,評論服務

那么問題來了,涉及到多個服務之前的交互,其實跟上面那位同學問我的是一樣的問題,是否需要統一工程,組裝其他服務?是否可以相互調用?

這種的話我推薦2種實現方式:

一. API網關直接轉發到博客服務中

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

?
1
2
3
4
5
6
7
8
9
10
@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 組裝所有信息返回。
}

二.增加聚合服務層

集合服務層也就是上面那位同學說的是不是需要有一個統一的工程來做組裝服務的事情,這個就是說我們博客服務還是提供基礎的博客信息,單獨加一個業務的聚合服務用來組裝這些信息統一返回給調用方,偽代碼如下:

?
1
2
3
4
5
6
7
8
9
10
@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 組裝所有信息返回。
}

數據都是遠程調用的,當然這邊你可以并行去調用,還有一種方式就是聚合操作在API網關中進行,這種方案也是可行的,我建議還是不要在網關中做,API網關盡量簡單,只轉發,增加聚合服務層是不錯的選擇。

如果你的服務治理是用dubbo構建的,聚合服務層也是比較好的方法,將dubbo服務聚合統一提供http接口給外部調用。

三.調用方自行去獲取各個數據

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

總結

至于要怎么去組裝數據,還是得你自己來定,可以將組裝放在對應的業務服務中,也可以單獨增加一個聚合服務來組裝,也可以讓客戶端自己去組裝。

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

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://www.jianshu.com/p/27eb24be1a0b

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩视频一区二区三区 | 2019国内自拍大神视频 | 18未年禁止免费观看 | 国产美女亚洲精品久久久久久 | 小SAO货叫大声点妓女 | 精品久久99麻豆蜜桃666 | 精品在线看 | 欧美日韩精品乱国产 | 70岁多老妇人特黄a级毛片 | 法国老妇性xx在线播放 | free性欧洲 | 欧美成人免费观看的 | 唯美 清纯 另类 亚洲制服 | 国产成人永久免费视 | 精品综合久久久久久97超人 | 884hutv四虎永久7777 | 千金肉奴隶在线观看 | 国产成人精品本亚洲 | 日韩资源| 大象传媒1234区 | 成人免费视频一区二区三区 | 亚洲国产第一区二区三区 | 农村妇女野外性生话免费视频 | 逼水真多 | 偷拍综合网 | 国产成人免费高清激情视频 | 亚久久伊人精品青青草原2020 | yjsp妖精视频在线观看免费 | 情侣宾馆愉拍自拍视频 | 日韩精品免费一区二区三区 | 香蕉久久一区二区不卡无毒影院 | 国产爱啪啪 | 福利视频久久 | 俺去啦最新官网 | 无套内谢大学生A片 | 爱色v | 国产精品成人va在线观看 | 久久亚洲成a人片 | 果冻传媒在线免费观看 | 精品国产人成亚洲区 | 星球大战成人h无删减版 |