关于使用 apache curator 的服务发现 (https://github.com/Netflix/curator/wiki/Service-Discovery) 的页面介绍了以下概念:
-
主要的抽象类是 ServiceProvider。它封装了特定命名服务的发现服务以及提供程序策略。提供程序策略是从给定服务的一组实例中选择一个实例的方案。有三种捆绑策略:循环,随机和粘性(始终选择相同的策略)。服务提供程序是使用 ServiceProviderBuilder 分配的。
-
上述每个查询方法都直接调用 ZooKeeper。如果您需要偶尔查询服务,则可以使用ServiceCache。它在内存中缓存特定服务的实例列表。它使用观察程序使列表保持最新。您可以通过 ServiceDiscovery.serviceCacheBuilder() 返回的构建器分配 ServiceCache。
我可以看到如何将 Provider 策略与ServiceProviderBuilder
一起使用,但是ServiceCacheBuilder
上没有等效的方法,并且ServiceCache
类本身上唯一可用的相关方法是getInstances()
,它获取所有实例。
如何将提供商策略与ServiceCache
一起使用?
@simonalexander2005我只是在查看代码,结果发现ServiceProvider
内部已经使用了serviceCacheBuilder
。TBH - 我要么忘记了这个,要么它被另一个提交者输入了 - 我不确定。无论如何,我对这里的跑来跑去感到非常抱歉。此外,必须更新文档以反映这一点 - 我今天将为此打开一个问题。我相信这让你很生气,再次为此感到抱歉。不过,好消息是,使用ServiceProvider
,您会自动获得缓存。
坦率地说,这方面的文档真的很糟糕。如果有人可以用更好的文档发出拉取请求,那就太棒了......
请注意,ServiceCache
实现了InstanceProvider
。另请注意,ProviderStrategy.getInstance()
的参数InstanceProvider
。因此,您可以将 ServiceCache 实例传递给要使用的任何提供程序策略。
我希望这有所帮助。