亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringCloud微服務的示例分析

發布時間:2021-07-10 13:42:14 來源:億速云 閱讀:169 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關SpringCloud微服務的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

Maven規范

1.所有項目必須要有一個統一的parent模塊

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

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

2.core 核心包的作用:

  • 以POJO形式約定各種開發規范;如BaseEntity,統一入參,返參

  • 各種二方、三方組件開箱即用AutoConfig;

  • 各種提高開發效率的幫助類等 XXXUtil

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

3.starter模塊

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

4.rate-limit模塊

用于放置非通用的自開發組件

5.正確區分Release版本 和 Snapshot版本

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

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

簡而言之:

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

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

服務調用

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

account
	account-api
	account-service

account-api 模塊中放消費方需要用到的東西,api接口,vo,入參等...

public interface AccountApi {
    ...
}

account-service實現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設計規范

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

可以使用以下兩種格式:

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

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

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

  • 域對象 用名詞而非動詞

  • 直接使用域對象名 使用/ticket而不是復數/tickets

  • 域對象關系表達 最大不超過2層,如/ticket/12/message

  • 需要正確區分 GET PUT POST DELETE 請求方法

  • 無法用名詞 + 請求方法表述的可以擴展為 /域對象/動詞 如 POST /user/login

在網關層對接口進行訪問控制,訪問控制的規則分為:

pb - public 所有請求均可訪問

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

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

df - default 網關請求token認證,并且請求參數和返回結果進行加解密

版本:

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

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

GET /v1/pb/user

POST /v1/pb/user

PUT /v1/pb/user

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

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

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

POST /v2/pb/user

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

代碼實現:

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")

網關

  1. 可以不承擔微服務鑒權功能,由自己服務實現(簡單服務可以直接在網關層鑒權)

  2. 網關鑒權與微服務鑒權的差異在我其他文章中有詳細說明,可參考此文:http://t.hk.uy/2c3

  3. 需要實現訪問控制權限,結合上文的Restful規范,屏蔽/pv/** 等特殊請求

  4. 需要實現灰度發布功能

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

感謝各位的閱讀!關于“SpringCloud微服務的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

多伦县| 民和| 仪征市| 深水埗区| 荆门市| 杭锦后旗| 库尔勒市| 和硕县| 清远市| 赣州市| 祁东县| 眉山市| 于都县| 金昌市| 横山县| 罗山县| 庆阳市| 武强县| 临桂县| 博湖县| 抚远县| 新邵县| 独山县| 垦利县| 赤壁市| 湟中县| 斗六市| 乌拉特后旗| 疏附县| 柳河县| 鄂托克前旗| 宁强县| 若羌县| 理塘县| 会同县| 利津县| 油尖旺区| 安龙县| 巨野县| 偃师市| 泗水县|