RPC Ctrip-Service Mesh示例
使用RPC API 在携程的 Service Mesh 中进行远程调用.
目前支持的API
@Override
<T> Mono<T> invokeMethod(String appId, String methodName, Object data, HttpExtension httpExtension, Map<String, String> metadata, TypeRef<T> type);
@Override
<T> Mono<T> invokeMethod(String appId, String methodName, Object request, HttpExtension httpExtension, Map<String, String> metadata, Class<T> clazz);
@Override
<T> Mono<T> invokeMethod(String appId, String methodName, Object request, HttpExtension httpExtension, TypeRef<T> type);
@Override
<T> Mono<T> invokeMethod(String appId, String methodName, Object request, HttpExtension httpExtension, Class<T> clazz);
@Override
<T> Mono<T> invokeMethod(String appId, String methodName, HttpExtension httpExtension, Map<String, String> metadata, TypeRef<T> type);
@Override
<T> Mono<T> invokeMethod(String appId, String methodName, HttpExtension httpExtension, Map<String, String> metadata, Class<T> clazz);
@Override
Mono<Void> invokeMethod(String appId, String methodName, Object request, HttpExtension httpExtension, Map<String, String> metadata);
@Override
Mono<Void> invokeMethod(String appId, String methodName, Object request, HttpExtension httpExtension);
@Override
Mono<Void> invokeMethod(String appId, String methodName, HttpExtension httpExtension, Map<String, String> metadata);
@Override
Mono<byte[]> invokeMethod(String appId, String methodName, byte[] request, HttpExtension httpExtension, Map<String, String> metadata);
@Override
<T> Mono<T> invokeMethod(InvokeMethodRequest invokeMethodRequest, TypeRef<T> type);
调用逻辑
下图为 Capa 的 RPC 在携程的 Service Mesh 服务调用逻辑
- Service A 为服务调用方, Service B 为服务被调用方
- Service A 通过 Capa SDK 发起对 Service B 的服务调用
- Capa RPC API 是统一的 API 规范
- 通过 SPI 机制可以找到 Capa RPC API 的在 Ctrip 中的具体 RPC 实现 Capa-Ctrip RPC Impl
- 获取 Service B 的返回数据,并返回给服务调用方 Service A
实现步骤
-
实现 RpcServiceOptions (实际 RPC 调用需要的参数) 和 CtripSpiOptionsLoader (加载 RpcServiceOptions 的实现类) 接口。
例如 CtripRpcServiceOptions 和 CtripSpiOptionsLoader
-
继承 CapaSerializeHttpSpi , 实现在携程 Service Mesh 的 RPC 调用。
例如 CtripCapaHttp
-
构建 capa-component-rpc.properties 文件,添加 group.rxcloud.capa.component.http.CapaHttp 和 group.rxcloud.capa.spi.config.CapaSpiOptionsLoader 对应的类的路径,以支持 SPI 方式加载对应的类。
例如:
group.rxcloud.capa.component.http.CapaHttp=group.rxcloud.capa.spi.group.rxcloud.http.CtripCapaHttp
group.rxcloud.capa.spi.config.CapaSpiOptionsLoader=group.rxcloud.capa.spi.group.rxcloud.config.CtripSpiOptionsLoader
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.
最后修改 01.06.2022: docs: refactor (f7fe0e0)