跳到主要内容

RPC API

什么是RPC API

Layotto的RPC API基于Mosn的grpc handler设计,提供多协议、模块化、智能、安全的服务调用

RPC API的接口与Dapr一致,可以在代码invoke.go中看到接口的具体设计细节。

使用 Layotto RPC API 进行服务调用,您的应用程序可以使用标准 HTTP 或 X-Protocol 协议可靠且安全地与其他应用程序通信.

sidecar

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设计文档