- gPRC 介绍
- gPRC 介绍 - 资料收集整理
- gPRC 介绍 - Protocol Buffer 3
- gPRC文档
- gPRC文档 - gRPC官方文档(中文版)
- gPRC文档 - gRPC动机和设计原则
- gPRC文档 - 源码导航
- 基础 - NameResolver
- NameResolver - URI术语
- NameResolver - 类NameResolver
- NameResolver - 类DnsNameResolver
- NameResolver - 类DirectAddressNameResolver
- NameResolver - NameResolver的用法
- 基础 - Metadata
- Channel层
- Channel设计与代码实现 - 类Channel
- Channel设计与代码实现 - 类ManagedChannel
- 类ManagedChannelImpl - 空闲模式
- 类ManagedChannelImpl - InUseStateAggregator
- 类ManagedChannelImpl - Name Resolver
- 类ManagedChannelImpl - Load Balancer
- 类ManagedChannelImpl - Transport
- 类ManagedChannelImpl - Executor
- 类ManagedChannelImpl - 关闭
- Channel层 - Channel Builder设计与代码实现
- Channel Builder设计与代码实现 - 类ManagedChannelBuilder
- Channel Builder设计与代码实现 - 类AbstractManagedChannelImplBuilder
- Channel Builder设计与代码实现 - 类NettyChannelBuilder
- Channel层 - Channel Provider设计与代码实现
- Channel Provider设计与代码实现 - 类ManagedChannelProvider
- Channel Provider设计与代码实现 - 类NettyChannelProvider
- Channel层 - 类CallOptions
- Stub层 - 类DemoServiceBlockingStub
- Stub层 - 类AbstractStub
- 客户端流程
- 状态 - 类Status
- 状态 - 状态码详细定义
- 状态 - 类StatusException
- 状态 - 异常处理的流程分析
- 实践 - 集成Spring Boot
- 实践 - 文档生成
- 文档生成 - 支持proto3
- 文档生成 - build插件
- 文档生成 - 使用模板定制输出
- 实践 - 代理
- 实践 - 超时
NameResolver - 类NameResolver
类定义
NameResolver 定义为一个 abstract 类,而不是 interface :
public abstract class NameResolver {}
类方法
getServiceAuthority()
返回用于验证与服务器的连接的权限(authority)。 必须来自受信任的来源,因为如果权限被篡改,RPC可能被发送到攻击者,泄露敏感用户数据。
实现必须以不阻塞的方式生成它,通常在一行中(in line),必须保持不变。使用同样的参数从同一个的 factory 中创建出来的 NameResolver 必须返回相同的 authority 。
public abstract String getServiceAuthority();
start()
开始解析。listener 用于接收目标的更新。
public abstract void start(Listener listener);
shutdown()
停止解析。listener 的更新将会停止。
public abstract void shutdown();
refresh()
重新解析名字。
只能在 start() 方法被调用之后调用。
这里仅仅是一个暗示。实现类将它作为一个信号,但是可能不会立即开始解析。它绝不抛出异常。
默认实现是什幺都不做。
public void refresh() {}
内部类 Factory
创建 NameResolver 实例的工厂类。
public abstract static class Factory {
/**
* 端口号,用于当目标或者底层命名系统没有提供端口号的情况
*/
public static final Attributes.Key<Integer> PARAMS_DEFAULT_PORT =
Attributes.Key.of("params-default-port");
}
newNameResolver()
创建 NameResolver 用于给定的目标URI,或者在给定URI无法被这个 factory 解析时返回 null。决定应该仅仅基于 URI 的 scheme。
参数 targetUri 表示要解析的目标 URI,而这个 URI 的 scheme 必须不能为 null。
参数 params 是可选参数。权威key在 Factory 中以 PARAMS_*
字段定义。
public abstract NameResolver newNameResolver(URI targetUri, Attributes params);
getDefaultScheme()
返回默认 scheme, 当 ManagedChannelBuilder.forTarget(String) 方法被给到 authority 字符串而不是符合的 URI时,用于构建 URI 。
public abstract String getDefaultScheme();
内部接口 Listener
接收地址更新。
所有的方法都要求快速返回。
public interface Listener {}
onUpdate()
注意: 已经被废弃,改用 onAddresses() 方法。
@Deprecated
void onUpdate(List<ResolvedServerInfoGroup> servers, Attributes attributes);
onAddresses()
处理被解析的地址和配置的更新。
实现不可以修改给定的参数 servers 。
参数 servers 指被解析的服务器地址。空列表将触发 onError() 方法。
void onAddresses(List<EquivalentAddressGroup> servers, Attributes attributes);
onError()
处理从 resolver 而来的错误。
参数 error 为非正常的状态
void onError(Status error);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论