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

SpringCloud 微服務最佳開發(fā)實踐

 更新時間:2021年07月08日 16:40:32   作者:飄渺Jam的博客  
本文結合我們實際的開發(fā)中遇到的一些問題整理出了一份微服務開發(fā)的實踐規(guī)范,對SpringCloud 微服務開發(fā)實踐相關知識感興趣的朋友一起看看吧

現(xiàn)在基于SpringCloud的微服務開發(fā)日益流行,網(wǎng)上各種開源項目層出不窮。我們在實際工作中可以參考開源項目實現(xiàn)很多開箱即用的功能,但是必須要遵守一定的約定和規(guī)范。

本文結合我們實際的開發(fā)中遇到的一些問題整理出了一份微服務開發(fā)的實踐規(guī)范,歡迎各位大佬拍磚指點。

Maven規(guī)范

1.所有項目必須要有一個統(tǒng)一的parent模塊

所有微服務工程都依賴這個parent,parent用于管理依賴版本,maven倉庫,jar版本的統(tǒng)一升級維護

在parent下層可以有 core,starter,rate-limit 等自定義模塊

2.core 核心包的作用:

  • 以POJO形式約定各種開發(fā)規(guī)范;如BaseEntity,統(tǒng)一入?yún)?,返?/li>
  • 各種二方、三方組件開箱即用AutoConfig;
  • 各種提高開發(fā)效率的幫助類等 XXXUtil

注意:core包所有依賴的scope必須是provided,避免傳遞依賴,同時配合Condition注解按條件加載Bean 如 @ConditionalOnClass(Ribbon.class),@ConditionalOnBean(StringRedisTemplete.class)

3.starter模塊

如果你每個服務都需要依賴10幾個starter,可以建一個統(tǒng)一的starter模塊幫他們統(tǒng)一依賴進來,管理依賴集,簡化依賴

4.rate-limit模塊

用于放置非通用的自開發(fā)組件

5.正確區(qū)分Release版本 和 Snapshot版本

說明:如果是Snapshot版本,那么在mvn deploy時會自動發(fā)布到快照版本庫中,而使用快照版本的模塊,在不更改版本號的情況下,直接編譯打包時,Maven會自動從鏡像服務器上下載最新的快照版本。

如果是Release版本,那么在mvn deploy時會自動發(fā)布到正式版本庫中,而使用正式版本的模塊,在不更改版本號的情況下,編譯打包時如果本地已經存在該版本的模塊則不會主動去鏡像服務器上下載。

簡而言之:

Release : 正式版,有bug不能再繼續(xù)使用這個版本號

Snapshot:快照版,有bug可以繼續(xù)使用同一版本號,可以自動升級,推薦使用

服務調用

規(guī)范服務間通過引入sdk調用,服務消費者需要依賴生產者提供的api,配合snapshot方便升級

account
	account-api
	account-service

account-api 模塊中放消費方需要用到的東西,api接口,vo,入?yún)⒌?..

public interface AccountApi {
    ...
}

account-service實現(xiàn)account-api提供的接口

@RestController
@Log4j2
@Api(tags = "用戶接口")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class AccountController implements AccountApi {
    ...
}

消費者通過feign調用生產者,直接集成生產者提供的接口并處理熔斷

@Component
@FeignClient(name = "account-service",fallbackFactory = AccountClientFallbackFactory.class)
public interface AccountClient extends AccountApi {
    ...
}

@Component
public class AccountClientFallbackFactory implements FallbackFactory<AccountClient> {

    @Override
    public AccountClient create(Throwable throwable) {
        AccountClientFallback accountClientFallback = new AccountClientFallback();
        accountClientFallback.setCause(throwable);
        return accountClientFallback;
    }

}

@Slf4j
public class AccountClientFallback implements AccountClient {
    @Setter
    private Throwable cause;

    @Override
    public ResultData<AccountDTO> getByCode(String accountCode) {
        log.error("查詢失敗,接口異常" ,cause);
        AccountDTO account = new AccountDTO();
        account.setAccountCode("000");
        account.setAccountName("測試Feign");
        return ResultData.success(account);
    }

}

Restful設計規(guī)范

一個 API 是一個開發(fā)者的 UI - 就像其他任何 UI 一樣, 確保用戶體驗被認真的考慮過是很重要的!

可以使用以下兩種格式:

  1. /版本/訪問控制/域對象
  2. /版本/訪問控制/域對象/動作

域對象需要遵循以下幾條約束:

  • 域對象 用名詞而非動詞
  • 直接使用域對象名 使用/ticket而不是復數(shù)/tickets
  • 域對象關系表達 最大不超過2層,如/ticket/12/message
  • 需要正確區(qū)分 GET PUT POST DELETE 請求方法
  • 無法用名詞 + 請求方法表述的可以擴展為 /域對象/動詞 如 POST /user/login

在網(wǎng)關層對接口進行訪問控制,訪問控制的規(guī)則分為:

pb - public 所有請求均可訪問

pt - protected 需要進行token認證通過后方可訪問

pv - private 無法通過網(wǎng)關訪問,只能微服務內部調用

df - default 網(wǎng)關請求token認證,并且請求參數(shù)和返回結果進行加解密

版本:

以微服務為力度,整個服務進行升級

例如,一個微服務有如下API

GET /v1/pb/user

POST /v1/pb/user

PUT /v1/pb/user

如果 POST /v1/pb/user 需要升級,則需要將整個微服務 /v1 升級到 /v2,同時保證版本兼容的api老版本可以繼續(xù)訪問

GET /v2/pb/user 等價于 GET /v1/pb/user

POST /v1/pb/user 標記為已廢棄

POST /v2/pb/user

PUT /v2/pb/user 等價于 PUT /v1/pb/user

代碼實現(xiàn):

1.GET方式{version}可以是任意值,v1,v2均可,如:@GetMapping("/{version}/pb/user")

2.POST方法強制使用 V1 ,并標記為已廢棄,但是仍可使用

@Deprecated
@PostMapping("/v1/pb/user")

3.POST {version}應是當前版本,只能是v2

@PostMapping("/{version}/pb/user")

網(wǎng)關

  1. 可以不承擔微服務鑒權功能,由自己服務實現(xiàn)(簡單服務可以直接在網(wǎng)關層鑒權)
  2. 網(wǎng)關鑒權與微服務鑒權的差異在我其他文章中有詳細說明,可參考此文:http://t.hk.uy/2c3
  3. 需要實現(xiàn)訪問控制權限,結合上文的Restful規(guī)范,屏蔽/pv/** 等特殊請求
  4. 需要實現(xiàn)灰度發(fā)布功能

開發(fā)聯(lián)調的時候需要將服務器流量導入到本地,結合nacos的元數(shù)據(jù)與請求頭可實現(xiàn)服務實例的篩選。參考此文實現(xiàn):http://t.hk.uy/2c6

到此這篇關于SpringCloud 微服務最佳開發(fā)實踐的文章就介紹到這了,更多相關SpringCloud 微服務內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java源碼解析HashMap的tableSizeFor函數(shù)

    Java源碼解析HashMap的tableSizeFor函數(shù)

    今天小編就為大家分享一篇關于Java源碼解析HashMap的tableSizeFor函數(shù),小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 分享令人目瞪口呆的?Java?代碼技巧

    分享令人目瞪口呆的?Java?代碼技巧

    這篇文章主要介紹了令人目瞪口呆的?Java?代碼技巧,本文從寫?Java?程序的小方面一直寫到大方面,來闡述了如何才能寫好?Java?程序,并告訴讀者們如何才能提高自身的編碼水平,需要的朋友可以參考下
    2022-05-05
  • java this引用逃逸詳解

    java this引用逃逸詳解

    這篇文章主要介紹了java this引用逃逸的相關資料,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • 詳解Spring注解@Validated 失效分析

    詳解Spring注解@Validated 失效分析

    這篇文章主要介紹了Spring注解@Validated失效分析,文中有詳細代碼示例講解了@Validated為何失效,需要的小伙伴可以參考一下
    2023-04-04
  • 詳解JAVA 設計模式之狀態(tài)模式

    詳解JAVA 設計模式之狀態(tài)模式

    這篇文章主要介紹了JAVA 狀態(tài)模式的的相關資料,文中講解的非常細致,幫助大家更好的學習理解JAVA 設計模式,感興趣的朋友可以了解下
    2020-06-06
  • springboot項目以jar包運行的操作方法

    springboot項目以jar包運行的操作方法

    公司一個springboot項目本來是打war包的,突然要改為打jar包,不知所措了,糾結該如何操作呢,折騰半天終于搞定了,下面把解決方案分享給大家,對springboot打jar包方式感興趣的朋友一起看看吧
    2021-06-06
  • java客戶端線上Apollo服務端的實現(xiàn)

    java客戶端線上Apollo服務端的實現(xiàn)

    這篇文章主要介紹了java客戶端線上Apollo服務端的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • 詳解Java面向對象編程中方法的使用

    詳解Java面向對象編程中方法的使用

    這篇文章主要介紹了詳解Java面向對象編程中方法的使用,包括方法的重載和參數(shù)以及泛型方法等知識點,需要的朋友可以參考下
    2016-02-02
  • java秒殺之redis限流操作詳解

    java秒殺之redis限流操作詳解

    這篇文章主要為大家詳細介紹了java秒殺之redis限流操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • java實現(xiàn)后臺返回base64圖形編碼

    java實現(xiàn)后臺返回base64圖形編碼

    這篇文章主要介紹了java實現(xiàn)后臺返回base64圖形編碼,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評論

电白县| 大宁县| 务川| 新疆| 腾冲县| 凉山| 日土县| 资中县| 嘉义县| 广宗县| 万荣县| 鄂托克旗| 栖霞市| 偏关县| 若尔盖县| 吉林省| 定兴县| 周宁县| 厦门市| 建水县| 汉沽区| 永善县| 台东县| 梅河口市| 汕尾市| 新竹市| 佛冈县| 长治市| 巴南区| 延长县| 保亭| 介休市| 梅河口市| 时尚| 临汾市| 扎赉特旗| 万山特区| 安阳县| 贡嘎县| 民乐县| 府谷县|