mirror of
https://github.com/go-kratos/kratos.git
synced 2025-01-10 00:29:01 +02:00
add warden resolver doc
This commit is contained in:
parent
fcafaf367a
commit
a4dcf67da2
@ -6,7 +6,7 @@
|
|||||||
direct://default/127.0.0.1:9000,127.0.0.1:9091
|
direct://default/127.0.0.1:9000,127.0.0.1:9091
|
||||||
```
|
```
|
||||||
|
|
||||||
> 关于`target`就是标准的`URL`资源定位符[查看WIKI](https://zh.wikipedia.org/wiki/%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E5%AE%9A%E4%BD%8D%E7%AC%A6)
|
> `target`就是标准的`URL`资源定位符[查看WIKI](https://zh.wikipedia.org/wiki/%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E5%AE%9A%E4%BD%8D%E7%AC%A6)
|
||||||
|
|
||||||
其中`direct`为协议类型,此处表示直接使用该`URL`内提供的地址`127.0.0.1:9000,127.0.0.1:9091`进行连接,而`default`在此处无意义仅当做占位符。
|
其中`direct`为协议类型,此处表示直接使用该`URL`内提供的地址`127.0.0.1:9000,127.0.0.1:9091`进行连接,而`default`在此处无意义仅当做占位符。
|
||||||
|
|
||||||
@ -129,14 +129,15 @@ import (
|
|||||||
// AppID your appid, ensure unique.
|
// AppID your appid, ensure unique.
|
||||||
const AppID = "demo.service" // NOTE: example
|
const AppID = "demo.service" // NOTE: example
|
||||||
|
|
||||||
// NewClient new member grpc client
|
func init(){
|
||||||
func NewClient(cfg *warden.ClientConfig, opts ...grpc.DialOption) (DemoClient, error) {
|
|
||||||
|
|
||||||
// NOTE: 注意这段代码,表示要使用discovery进行服务发现
|
// NOTE: 注意这段代码,表示要使用discovery进行服务发现
|
||||||
// NOTE: 还需注意的是,resolver.Register是全局生效的,所以建议该代码放在进程初始化的时候执行
|
// NOTE: 还需注意的是,resolver.Register是全局生效的,所以建议该代码放在进程初始化的时候执行
|
||||||
// NOTE: !!!切记不要在一个进程内进行不同中间件的Register!!!
|
// NOTE: !!!切记不要在一个进程内进行多个不同中间件的Register!!!
|
||||||
resolver.Register(discovery.Builder())
|
resolver.Register(discovery.Builder())
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewClient new member grpc client
|
||||||
|
func NewClient(cfg *warden.ClientConfig, opts ...grpc.DialOption) (DemoClient, error) {
|
||||||
client := warden.NewClient(cfg, opts...)
|
client := warden.NewClient(cfg, opts...)
|
||||||
conn, err := client.Dial(context.Background(), "discovery://default/"+AppID)
|
conn, err := client.Dial(context.Background(), "discovery://default/"+AppID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -149,7 +150,13 @@ func NewClient(cfg *warden.ClientConfig, opts ...grpc.DialOption) (DemoClient, e
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
注意看传入`client.Dial`的`target`是`discovery://default/${appid}`,当gRPC进行解析后会得到`scheme`=`discovery`,`warden/resolver.Builder`会通过该`scheme`获取到`naming/discovery.Discovery`对象。而`naming/discovery.Discovery`对象基于`id`就知道要获取哪个服务的实例信息。
|
> 注意:`resolver.Register`是全局行为,建议放在包加载阶段或main方法开始时执行,该方法执行后会在gRPC内注册构造方法
|
||||||
|
|
||||||
|
`target`是`discovery://default/${appid}`,当gRPC内进行解析后会得到`scheme`=`discovery`和`appid`,然后进行以下逻辑:
|
||||||
|
|
||||||
|
1. `warden/resolver.Builder`会通过`scheme`获取到`naming/discovery.Builder`对象(靠`resolver.Register`注册过的)
|
||||||
|
2. 拿到`naming/discovery.Builder`后执行`Build(appid)`构造`naming/discovery.Discovery`
|
||||||
|
3. `naming/discovery.Discovery`对象基于`appid`就知道要获取哪个服务的实例信息
|
||||||
|
|
||||||
# 服务注册
|
# 服务注册
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user