如何使用grpc |
您所在的位置:网站首页 › override如何使用 › 如何使用grpc |
我已经看到了一些关于负载平衡的高级信息,但我很难将这些信息整合在一起。以下是我的评论: 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 |