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=com.ctrip.ibu.capa.spi.ctrip.http.CtripCapaHttp
group.rxcloud.capa.spi.config.CapaSpiOptionsLoader=com.ctrip.ibu.capa.spi.ctrip.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.
Last modified January 20, 2022: refactor: move to capa-cloud (3bc8278)