返回介绍

NameResolver - 类DirectAddressNameResolver

发布于 2020-09-14 13:14:41 字数 3951 浏览 1123 评论 0 收藏 0

在类 AbstractManagedChannelImplBuilder 中有一个内部类,DirectAddressNameResolverFactory,这里实现了一个 NameResolver ,用于处理 DirectAddress。

Factory的代码

  1. private static final String DIRECT_ADDRESS_SCHEME = "directaddress";
  2. private static class DirectAddressNameResolverFactory extends NameResolver.Factory {
  3. final SocketAddress address;
  4. final String authority;
  5. // 构造函数中直接提供 address 和 authority
  6. DirectAddressNameResolverFactory(SocketAddress address, String authority) {
  7. this.address = address;
  8. this.authority = authority;
  9. }
  10. @Override
  11. public NameResolver newNameResolver(URI notUsedUri, Attributes params) {
  12. return new NameResolver() {
  13. ......// 细节后面看
  14. }
  15. }
  16. @Override
  17. public String getDefaultScheme() {
  18. // 默认的scheme是固定的 "directaddress"
  19. return DIRECT_ADDRESS_SCHEME;
  20. }
  21. }

NameResolver的实现

DirectAddressNameResolverFactory的NameResolver的实现是一个内部匿名类:

  1. public NameResolver newNameResolver(URI notUsedUri, Attributes params) {
  2. return new NameResolver() {
  3. @Override
  4. public String getServiceAuthority() {
  5. // 直接返回factory中传入并保存的authority
  6. return authority;
  7. }
  8. @Override
  9. public void start(final Listener listener) {
  10. // 不用解析,直接将 factory 中传入并保存的 address 给出去
  11. listener.onAddresses(
  12. Collections.singletonList(new EquivalentAddressGroup(address)),
  13. Attributes.EMPTY);
  14. }
  15. @Override
  16. public void shutdown() {}
  17. };
  18. }

总结

这个实现够简单,不过考虑到平时也是有需要用到直接地址的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文