如何在 Spring Cloud Zuul 中配置路由

Posted

技术标签:

【中文标题】如何在 Spring Cloud Zuul 中配置路由【英文标题】:How to config routes in Spring Cloud Zuul 【发布时间】:2016-06-05 21:30:44 【问题描述】:

在 Spring Cloud Zuul 服务器中,我们可以定义所有需要通过“application.properties”重定向的路由。

例如:

zuul.routes.resource.path=/api/**
zuul.routes.resource.url=http://api.com:9025

一旦创建了fat jar,“application.properties”就会被封装到jar中,并且无法在文件中编辑和重新加载规则。

有没有在外部文件中告知 Zuul 路由,同时在不停止服务器的情况下重新加载它们?

【问题讨论】:

寻找解决方案一段时间后,我发现我可以在配置服务器中为zuul应用程序创建一个应用程序属性,例如zuul。属性并在那里设置所有路线。重要的是要提到 bootstrap.properties 中的配置客户端名称必须与配置服务器中的应用程序属性名称相同。 我们可以从数据库中加载zuul.routes.resource.url 值吗? 是的,我们可以.. 但这很复杂。这种模式称为服务发现。服务发现使您能够在不停止网关服务器的情况下更改服务(以及其他好处)。 Spring 支持 Eureka、Consul 或 Zookeper 进行服务发现。 【参考方案1】:

您可以为此使用 spring cloud 配置。

Spring Cloud Config 为分布式系统中的外部化配置提供服务器和客户端支持。使用 Config Server,您可以集中管理所有环境中应用程序的外部属性

http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html#_spring_cloud_config_client

【讨论】:

唯一不方便的是 Cloud Config Server 与连接到它的所有项目共享这些属性,请记住“路由”属性专门用于 Zuul 服务器,同时我将有其他不必要的属性项目。就是这样! 有什么方法可以通知Zuul服务器如何重新加载规则? 据我所知,配置服务器只是将属性共享给相关应用程序。在我的配置服务器中,我有 app1.yml、app2.yml,每个应用程序都有自己的属性。关于第二个问题,我不知道这是否可能。 到目前为止,我只有一个 application.properties 用于所有应用程序。知道我们是否可以读取默认应用程序和您所说的特定应用程序属性的应用程序吗? 我不知道这是否是最好的解决方案,但您可以使用配置文件解决它,您创建默认的 application.yml,并为每个应用创建一个,例如 application-app1.yml、application-app2 .yml。我用它来组织开发和生产环境。【参考方案2】:

...聚会有点晚了,但是...

您可以使用 ConfigServer 为所欲为!

    为所有应用程序通用的配置创建一个 application.yml 创建配置文件特定的应用程序-mycommonprofile.yml。同 1. 但对于“mycommonprofile”配置文件。 为每个特定于该应用程序的应用程序创建一个 appX.yml。 创建配置文件特定的 appX-myprofile.yml。同 3. 但对于“myprofile”个人资料。

所有这些文件都是可选的,不依赖于任何其他文件。例如,您可以有一个没有 application.yml 的 application-mycommonprofile.yml。

希望有帮助!

【讨论】:

【参考方案3】:

另一个迟到的答案,但另一种方法是使用配置文件配置文件,它位于文件系统中,位于 fatjar 之外。

如果您的 Zuul 代理的配置名称是“zuul”并且您的常规配置文件是“zuul.properties”或“zuul.yaml”,那么它会在“zuul-.properties”中查找特定于配置文件的配置文件或“zuul-.yaml”。 如果您未指定配置文件,则名为“默认”的配置文件将处于活动状态。

因此,您可以从外部文件名“zuul-default.properties”或“zuul-default.yaml”(或“zuul-default.yml”,如果您使用 3 个字母的文件扩展名)加载属性。 然后在没有指定其他配置文件时加载它。

【讨论】:

以上是关于如何在 Spring Cloud Zuul 中配置路由的主要内容,如果未能解决你的问题,请参考以下文章

在同一个项目中配置spring cloud合约和zuul代理

Spring Cloud(Dalston.SR5)--Zuul 网关-路由配置

如何Spring Cloud Zuul作为网关的分布式系统中整合Swagger文档在同一个页面上

spring-cloud-Zuul学习--典型配置重新定义spring cloud实践

跟我学Spring Cloud(Finchley版)-17-Zuul路由配置详解

spring cloud zuul