从上一篇留下的两个问题出发,介绍从服务发现获取的服务注册列表中获取一个服务注册信息并将其实例成可使用的client对象的过程;
分析
从服务发现获取的服务注册列表中获取一个服务注册信息并将其实例成可使用的client对象需要经过以下步骤:
1 | 1、服务发现获取服务列表;对其进行监听,如果服务列表发生变化进行更新; |
从以上步骤抽象出角色和接口:
1 | Reslover(解析器): 通过服务名(服务注册时的服务命名)解析成服务对象列表的过程;通过服务发现获取列表,服务监听更新列表; |
接口定义伪代码如下:
1 | type Selector interface { |
实现
1 | github.com/go-kratos/kratos/selector |
其中grpc提供了解析器的reslover.Builder接口和reslover.Reslover接口以及均衡器的balancer.Picker接口和balancer.PickResult接口,实现这些接口并进行注册;
最后
这里只是简单介绍从服务发现获取的服务注册列表中获取一个服务注册信息并将其实例成可使用的client对象的过程,将角色和方法进行分解;具体实现还需要自己去看代码,最好再自己也实现一遍。