最重要的一点:是否有一种方法可以在Zookeeper中支持非Java发现客户端创建的实例,同时提供自定义元数据。
我正在构建一个Spring Cloud API网关。我们的大部分路线都使用Zookeeper发现和Spring Cloud负载均衡器。它适用于Java微服务。除了正常的发现和负载平衡之外,我还想使用元数据来指定自定义属性;比如安全性和速率限制参数。
我需要介绍一些用Python编写的非Java服务,所以我想对它们使用发现,因为它们托管在动态集群中。在这种情况下,如果我能让它做我需要的事情,那么继续使用Zookeeper对我们来说意义重大。
我已经检查了Zookeeper/services节点的内容,以了解发生了什么,我能够复制其中的大部分内容,并实际实现发现和负载平衡,但元数据更深,我无法实现,因为它嵌入了Curator/Zookeeper特定的对象中。
我想我已经知道了足够的知识来编写我自己的DiscoveryClient
实现并返回我自己的ServiceInstance
,但如果我几乎可以使用我已经拥有的,那似乎是一项艰巨的工作。我还必须为此编写Python客户端。
如果ObjectMapper
不能自动识别ZookeeperInstance
,我通过重新实现InstanceSerializer
手动构建ZookeeperInstance
来解决这个问题。