在客户端动态添加服务器/运行时

在客户端动态添加服务器/运行时

问题描述:

我正在使用Consul进行服务发现;并在客户端启动期间在NameResolver.start(侦听器侦听器)中提供服务器列表。在客户端动态添加服务器/运行时

  1. 我如何可以添加加入,在为服务供应商(在领事)
  2. 我使用轮循新的服务器;并且当其中一台服务器死亡时;它会一直打到死亡的服务器
  3. 您是否有样本要重试UNAVAILABLE异常?我只想在放弃客户端之前至少重试一次。

预先感谢您

当服务器变化(领事)的名单,拨打NameResolver.Listener.onUpdate(),你应该已经呼吁至少一次。

负载均衡实现和API正在接受大规模的返工,这将大大提高循环。

+0

是我做的NameResolver.Listerner.onUpdate();但是当Consul状态改变时,我不能再次调用NameResolver.Listerner.onUpdate(),因为监听器被调用者ManagedChannel取消。我试着在NameResolver.start(Listener listener)方法中保留Listner的引用。 – sid

+0

唯一的选择好像我将不得不编写自己的Load Balancer;再次不幸的是我不能使用TransportManager.updateRetainedTransports(),因为它尚未实现。所有这些都是为了避免使用Ngnix或其他HTTP2负载均衡器代替gRPC客户端负载平衡器 – sid

+0

NameResolver应将start()过程中提供的侦听器存储为字段,然后在发生更改时调用onUpdate()。我不明白如何另一块代码可以将参考归零。这是由内置的DnsNameResolver完成的。 –

我写了我自己的LoadBalancer;和@Override pickTransport()到Consul的RoundRobin健康gRPC服务器。

在这里我使用领事作为我的注册表。它工作正常。

它包含了尤里卡和领事的例子。

https://github.com/WThamira/gRpc-spring-boot-example

在启动