Kitex Combine Service

2022-04-27 10:15 更新

使用場景

有些服務提供了幾十個方法,而對于調(diào)用方可能只請求其中一兩個方法,為了避免這種大型 Service 帶來的龐大的生成代碼,Combine Service 可以讓用戶將原來一個 Service 的幾十個方法拆分成多個 Service。比如原來的 Service 是:

service ExampleService {
    ExampleResponse Method0(3: ExampleRequest req)
    ExampleResponse Method1(3: ExampleRequest req)
    ExampleResponse Method2(3: ExampleRequest req)
}

用戶 IDL 定義可以拆分為三個 Service:

service ExampleService0 {
    ExampleResponse Method0(3: ExampleRequest req)
}

service ExampleService1 {
    ExampleResponse Method1(3: ExampleRequest req)
}

service ExampleService2 {
    ExampleResponse Method2(3: ExampleRequest req)
}

調(diào)用方可以只保留其中一個 Service 生成代碼,方法名和參數(shù)保持一致不影響 RPC 調(diào)用。

具體描述

當 root thrift 文件中存在形如下述定義時:

service ExampleService0 {
    ExampleResponse Method0(3: ExampleRequest req)
}

service ExampleService1 {
    ExampleResponse Method1(3: ExampleRequest req)
}

service ExampleService2 {
    ExampleResponse Method2(3: ExampleRequest req)
}

帶上?--combine-service? 參數(shù)后,會生成一個名為 CombineService 的新 service 及其對應的 client/server 代碼。 其定義為:

service CombineService {
    ExampleResponse Method0(3: ExampleRequest req)
    ExampleResponse Method1(3: ExampleRequest req)
    ExampleResponse Method2(3: ExampleRequest req)
}

當同時使用了?-service? 參數(shù)時,會使用 CombineService 作為 main package 中 server 對應的 service 。 注意: CombineService 只是 method 的聚合,因此當 method 名沖突時將無法生成 CombineService 。

Tips:

配合 ?extends ?關(guān)鍵字,可以實現(xiàn)跨文件的 CombineService

如:

service ExampleService0 extends thriftA.Service0 {
}

service ExampleService1 extends thriftB.Service1 {
}

service ExampleService2 extends thriftC.Service2 {
}


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號