如何使用grpc

您所在的位置:网站首页 override如何使用 如何使用grpc

如何使用grpc

2023-05-25 18:04| 来源: 网络整理| 查看: 265

我已经看到了一些关于负载平衡的高级信息,但我很难将这些信息整合在一起。以下是我的评论:

gRPC中的负载平衡 (gRPC GitHub)gRPC负载平衡 (gRPC博客)基于HTTP/2工程的gRPC --一种健壮的高性能协议 (gRPC博客)gRPC客户端负载平衡 (微软指南)Java gRPC自定义客户端负载平衡 (堆栈溢出)

显然,核心部件是一个解析器和负载均衡器。我的用例是我有几个静态的,已知的地址。我只是想把它们作为主要的,次要的,等等来优先考虑。我相信pick_first政策会在这方面起作用。

我无法理解的是如何设置自定义NameResolver。我定义了一个定制的NameResolverProvider:

public class StaticResolverProvider extends NameResolverProvider { @Value("${tls.enabled}") private boolean isTlsEnabled; @Override protected boolean isAvailable() { return true; } @Override protected int priority() { return 10; } @Override public NameResolver newNameResolver(URI targetUri, Args args) { return new StaticResolver(); } @Override public String getDefaultScheme() { return isTlsEnabled ? "https" : "http"; } }

并且(希望)在创建“我的频道”时注册它:

new NameResolverRegistry().register(new StaticResolverProvider());

最后,下面是(当前未实现的) NameResolver:

public class StaticResolver extends NameResolver { @Override public String getServiceAuthority() { return null; } @Override public void shutdown() { } }

这是我认为唯一需要实现的两种方法。这两种方法似乎都与返回已知地址的有序列表无关。getServiceAuthority()提到身份验证,这让我感到困惑,因为我不知道NameResolver与身份验证有什么关系。

请告诉我错过了什么。谢谢!

更新

我想出了这个名字。首先,在我的频道注册我的解析器看起来有点不同:

NameResolverRegistry.getDefaultRegistry().register(new StaticResolverProvider());

在我的NameResolverProvider中,我更新了getDefaultScheme()方法以返回"customScheme",这是将其链接到频道对forTarget()的调用的部分。

最后一部分是在我的refresh()中实现NameResolver方法:

@Override public void refresh() { ResolutionResult.Builder resolutionResultBuilder = ResolutionResult.newBuilder(); List servers = new ArrayList(); servers.add(new EquivalentAddressGroup(new InetSocketAddress("localhost", 50055))); servers.add(new EquivalentAddressGroup(new InetSocketAddress("localhost", 50056))); resolutionResultBuilder.setAddresses(Collections.unmodifiableList(servers)); listener.onResult(resolutionResultBuilder.build()); }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3