在 Curator 中使用带有缓存的选择策略

Using selection strategies with a cache in Curator

使用 apache 管理器 (https://github.com/Netflix/curator/wiki/Service-Discovery) 的服务发现页面介绍了以下概念:

  1. The main abstraction class is ServiceProvider. It encapsulates the discovery service for a particular named service along with a provider strategy. A provider strategy is a scheme for selecting one instance from a set of instances for a given service. There are three bundled strategies: Round Robin, Random and Sticky (always selects the same one). ServiceProviders are allocated by using a ServiceProviderBuilder.

  2. Each of the above query methods calls ZooKeeper directly. If you need more than occasional querying of services you can use the ServiceCache. It caches in memory the list of instances for a particular service. It uses a Watcher to keep the list up to date. You allocate a ServiceCache via the builder returned by ServiceDiscovery.serviceCacheBuilder().

我可以看到如何使用 ServiceProviderBuilder 的 Provider 策略,但是 ServiceCacheBuilder 上没有等效方法,ServiceCache 上唯一可用的相关方法 class本身就是getInstances(),它得到所有个实例。

如何使用具有 ServiceCache 的提供者策略?

坦率地说,这方面的文档真的很糟糕。如果有人可以提出带有更好文档的拉取请求,那就太好了...

请注意 ServiceCache 实现了 InstanceProvider。还要注意 ProviderStrategy.getInstance() 的参数是 InstanceProvider。因此,您可以将 ServiceCache 实例传递给您要使用的任何 ProviderStrategy。

希望对您有所帮助。

@simonalexander2005 我刚刚查看了代码,结果发现 ServiceProvider 内部已经使用了 serviceCacheBuilder。 TBH - 我要么忘记了这一点,要么它是由另一个提交者输入的 - 我不确定。无论如何,我对这里的逃避感到非常抱歉。此外,必须更新文档以反映这一点——我今天将为此打开一个问题。我相信这会让你抓狂,再次为此感到抱歉。不过,好消息是 ServiceProvider 你会自动获得缓存。