RPC 远程调用过程,
调用其他服务的过程,是分布式系统中调用不同节点的常用通信方式
RPC 服务接口的分为三个部分
-
服务的名字
为了避免包名的冲突,我们可以在服务注册的时候加上包的路径,这个路径并不是go的执行路径,
rpc.RegisterName() 函数在注册,编译器会要求传入符合 服务接口的函数,const HelloServiceNmae = "/path/to/pkg.HelloService" // 注册的时候加上包的名字 type HelloServiceInterface = interface { hello( requst string,replace *string ) error // 函数的声明 }
-
服务要实现的详细方法列表
服务对应方法中的函数,hello函数
- 方法有两个可序列化参数,第二个参数是指针类型 ,返回一个error类型
Hello(request string, reply *string) error
- 方法必须是公开的,也就是大写开头的
-
注册该服务类型的函数
- 根据服务名字或者路径➕名字,注册服务到RPC
// 注册函数 func RegisterHelloService(src HelloServiceInterface) error { return rpc.RegisterName(HelloServiceNmae,src) }
- 在客户端调用的时候,也会根据规范调用RPC中注册的函数
func (p *HelloServiceClient) Hello(request string, repley *string) error { // 调用RPC的服务名字 和 方法,传入返回参数的地址 return p.Client.Call(service.HelloServiceName+".Hello", request, repley) }
demo
- 基于的hello接口 /RPC/service/HelloService.go
package<