0

我们正在建立一个新的微服务架构,前端是 Zuul,后端是一堆支持 tomcat 的微服务。每个服务在启动时都会向 Eureka 注册,任何想要调用这些服务的客户端都将通过 Zuul 进行。我们已经把这一切都连接好,一切正常。

然而,我有几个问题,我们如何才能使这个架构更加动态。

  1. 我们假设 Ribbon/Eureka 开箱即用,但尚未找到解决方案的一件事是,当我们向后端添加更多服务时,不知何故(通过 Archiaus 并更新到 Zuul 的 eureka-client.properties 文件) Zuul 的 Ribbon 客户端会使用新的服务细节(例如 vipaddress、负载平衡算法等)更新自己。到目前为止,唯一可行的方法是更新属性文件并重新启动 Zuul (ughhh)。

例如,假设今天我们在后端有 2 个微服务,因此,Zuul 的 eureka/ribbon 客户端配置将包括以下内容:

ribbon.client.niws.clientlist=service1|service2 zuul.ribbon.namespace=zuul.client

service1.zuul.client.DeploymentContextBasedVipAddresses=myService1 service1.zuul.client.NIWSServerListClassName=com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList

service2.zuul.client.DeploymentContextBasedVipAddresses=myService2 service2.zuul.client.NIWSServerListClassName=com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList

现在明天,假设我们需要添加 service3。我们观察到的是,如果我们将这些细节添加到相同的配置中(见下文),它们只有在重新启动后才对 Zuul 可用。是否还有其他一些我们缺少的配置参数可以让我们动态引入新的服务细节,或者我们是否必须滚动我们自己的 Eureka/Ribbon 客户端才能做到这一点?

ribbon.client.niws.clientlist=service1|service2|service3 zuul.ribbon.namespace=zuul.client

service1.zuul.client.DeploymentContextBasedVipAddresses=myService1 service1.zuul.client.NIWSServerListClassName=com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList

service2.zuul.client.DeploymentContextBasedVipAddresses=myService2 service2.zuul.client.NIWSServerListClassName=com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList

service3.zuul.client.DeploymentContextBasedVipAddresses=myService3 service3.zuul.client.NIWSServerListClassName=com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList

  1. 我的另一个问题是相关的,那就是我们真的需要为 Zuul 可能路由到的每个服务添加客户端配置(在 eureka-client.properties 中)吗?在某些时候,我们可能有 100 多个服务正在运行,并且试图在 Zuul 中维护所有相关的客户端配置似乎有点笨拙。有没有办法全局配置 Zuul 以将所有服务从 Eureka(或基于 Eureka 中的某些服务元数据)加载到其客户端列表中,并在新服务向 Eureka 注册时动态更新此列表?

谢谢!

4

1 回答 1

0

问题在于命名空间。如果我们使用默认命名空间,它应该能够获取默认添加的新属性。

于 2015-12-10T17:00:42.973 回答