RPC API
什么是RPC API
Layotto的RPC API基于Mosn的grpc handler设计,提供多协议、模块化、智能、安全的服务调用。
RPC API的接口与Dapr一致,可以在代码invoke.go中看到接口的具体设计细节。
使用 Layotto RPC API 进行服务调用,您的应用程序可以使用标准 HTTP 或 X-Protocol 协议可靠 且安全地与其他应用程序通信.
Layotto 使用 sidecar 架构。使用 Layotto ,您可以在任何 Layotto 实例上使用RPC API调用应用程序。 Sidecar 编程模型鼓励每个应用程序与其自己的 Layotto 实例进行对话。 Layotto 实例发现并相互通信。
何时使用 RPC API,有什么好处?
在许多具有多个服务需要相互通信的环境中,开发人员经常会问自己以下问题:
- 如何发现和调用不同服务的方法?
- 如何通过加密安全地调用其他服务并对方法应用访问控制?
- 如何处理重试和瞬时错误?
- 如何使用跟踪查看带有指标的调用图以诊断生产中的问题?
Layotto 通过提供服务调用 API 来解决这些挑战,该 API 充当反向代理与内置服务发现的组合,同时利用内置的分布式跟踪、度量、错误处理、加密等。
如何使用RPC API?
您可以通过 grpc 接口 InvokeService 进行 RPC 调用。 API 在 api.go 中定义。
该组件需要在使用前进行配置。详细的配置说明见配置参考,目前Layotto使用的是集成MOSN的MOSN 4层过滤器,运行在MOSN上,所以配置文件Layotto使用的其实是一个MOSN配置文件。所以也可以参考MOSN配置文件的文档。
演示 1:Hello World -- 基本 Golang HTTP 服务器
此演示的快速入门文档:Hello World
echoserver在8889端口发布一个简单的接口,配置文件example.json利用mosn的路由能力转发http头中id字段等于HelloService:1.0的请求 到本地8889端口,然后在echoclient使用接口 InvokeService 进行 RPC 调用。
resp, err := cli.InvokeService(
ctx,
&runtimev1pb.InvokeServiceRequest{
Id: "HelloService:1.0",
Message: &runtimev1pb.CommonInvokeRequest{
Method: "/hello",
ContentType: "",
Data: &anypb.Any{Value: []byte(*data)}}},
)
Demo 2:Dubbo JSON RPC
本demo快速入门文档:Dubbo JSON RPC Example
服务端由dubbo示例程序dubbo-go-samples充当,配置文件 example.json 使用插件dubbo_json_rpc,以产生请求头。随后请求端client 使用接口 InvokeService 进行 RPC 调用。
resp, err := cli.InvokeService(
ctx,
&runtimev1pb.InvokeServiceRequest{
Id: "com.ikurento.user.UserProvider",
Message: &runtimev1pb.CommonInvokeRequest{
Method: "GetUser",
ContentType: "",
Data: &anypb.Any{Value: []byte(*data)},
HttpExtension: &runtimev1pb.HTTPExtension{Verb: runtimev1pb.HTTPExtension_POST},
},
},
)
实现原理
如果对实现原理感兴趣,或者想扩展一些功能,可以阅读RPC设计文档。