微服务中的外部 URL 配置

Posted

技术标签:

【中文标题】微服务中的外部 URL 配置【英文标题】:External URL configuration in microservice 【发布时间】:2019-05-26 01:06:42 【问题描述】:

我有多个通过 REST 调用相互通信的微服务。 我使用了 spring boot 和 spring rest,并在 application.properties 文件中配置了 rest 端点的 URL。 现在的问题是,如果一个端点的 URL 发生变化,那么我必须手动修改调用已更改的特定端点的服务的所有属性文件。

是否有解决此问题的方法,以便可以以某种方式将 URLS 放置在集中位置,这样任何修改都不会影响正在使用它的其他服务。

【问题讨论】:

【参考方案1】:

您可以使用 spring-cloud 来实现这一点。 spring-cloud 中使用的通常方法是在 git repo 中配置所需的属性。然后,您可以通过任何微服务以最少的配置访问这些属性。你可以参考projects in this repo limits-services 充当需要在spring-cloud-config-server 中配置的某些属性的客户端。希望这会有所帮助。

【讨论】:

如果您遇到任何身份验证问题refer this【参考方案2】:

如果是微服务,您可以使用 Spring Cloud Config (Spring Cloud Config, Spring Cloud Config Server)。它非常有用,您可以在运行时更新配置。

Spring Cloud Config 为分布式系统中的外部化配置提供服务器和客户端支持。使用配置服务器,您可以在所有环境中管理应用程序的外部属性。客户端和服务器上的概念与 Spring Environment 和 PropertySource 抽象映射相同,因此它们非常适合 Spring 应用程序,但可以用于以任何语言运行的任何应用程序。当应用程序通过部署管道从开发到测试再进入生产时,您可以管理这些环境之间的配置,并确保应用程序在迁移时具备运行所需的一切。

【讨论】:

【参考方案3】:

正如其他人所提到的,您可以使用Spring Cloud Config Server 远程加载您的应用程序配置。您只需要包含您的配置的git 存储库。

Spring Cloud 配置支持 Git,数据库作为你的配置存储。

想法是创建一个可以为其他应用程序提供配置的 spring-boot 应用程序。

@SpringBootApplication
@EnableConfigServer
public class ConfigServer 
  public static void main(String[] args) 
    SpringApplication.run(ConfigServer.class, args);
  

您可以使用密钥 spring.cloud.config.server 配置端口并提供您的 git 存储库

server.port: 8888
spring.cloud.config.server.git.uri: file://$user.home/config-repo

在客户端,如果您的类路径中有 spring-config,应用程序将尝试连接到端口 8888 上运行的应用程序以检索配置。

更多信息可以在here找到。

【讨论】:

【参考方案4】:

可以将配置放入数据库中。 之后需要有一个集中缓存服务供其他服务使用,可以是.jar服务, 然后可以在此服务的缓存类中加载这些值, 然后在前端需要有更新按钮,用于在修改数据库中的 URL 值后更新缓存,这样所有受影响的服务都可以使用新值。 并且更容易可能有独立的 UI 来更新这些配置,而不是直接更新数据库。

【讨论】:

【参考方案5】:

您可以使用Microconfig.IO 来管理您的服务配置,它的占位符功能可以从其他服务中引用某些服务的配置值。因此,在您的情况下,您在服务器中配置部署 url 并在客户端中放置占位符。这允许您只在一个地方编辑值,然后依赖它的每个人都会自动获得它。

【讨论】:

以上是关于微服务中的外部 URL 配置的主要内容,如果未能解决你的问题,请参考以下文章

难以使用Wiremock,微服务和外部https服务 - 没有捕获流量

微服务架构 | 2.1 使用 Spring Cloud Config 管理服务配置项 #yyds干货盘点#

Spring Cloud构建微服务架构分布式配置中心

构建微服务架构Spring Cloud:分布式配置中心

SpringCloud服务配置中心

springcloud配置中心