使用 Spring Cloud Config 将微服务配置外部化

如何设置托管 Spring Cloud Config 服务器的服务并将现有微服务连接为配置客户端服务。

在微服务系统中,我们可能需要或想要外部化配置,以便我们可以在应用程序之外抽象敏感数据或凭据。我们可以用Docker Compose做这样的事情,但是 compose 文件通常包含多个服务的值。我们可能希望进一步分离和限制访问。

这就是Spring Cloud Config等解决方案发挥作用的地方。我们在公共云上有一个免费的 Neo4j 图形数据库实例,因此我们可以在外部位置(例如本地文件或其他系统)设置凭据,并使用 Spring Cloud Config 访问这些密钥并将它们传递给批准的应用程序。

让我们潜入吧!

Architecture

虽然这篇文章不需要背景,但请随时查看上一篇博客文章以获取有关Neo4j 微服务的更多信息。我们现有的架构有一个 Neo4j 微服务(service4)和一个 Neo4j 云数据库。在今天的帖子中,我们将在它们之间添加新服务来管理和提取 Neo4j 服务所需的凭据。

这是架构:

Spring Cloud Config

Spring Cloud Config的项目概述对设计和使用有很好的解释,但我将在这里简单地用我自己的话来说。

Spring Cloud Config 为我们提供了一种外部化配置的方法,以便单个服务只能访问它们需要操作的属性。通过配置服务器,我们可以设置不同的环境,以便在不操纵测试值的情况下组织和管理凭据。该项目(默认情况下)设置为使用 Git 作为版本控制的属性文件,但可以设置为使用其他工具或实现来管理环境和值。

事不宜迟,让我们开始编码吧!

应用程序 – Spring Cloud 配置服务器

我们将使用start.spring.io中的 Spring Initializr 为我们的配置服务器应用程序设置大纲。

在表单上,?我们可以将ProjectLanguageSpring Bootversion 字段保留为默认值。在该Project Metadata部分下,我为我的个人项目更新了组名,但欢迎您将其保留为默认值。我命名了 artifact config-server,尽管命名取决于您,只要我们在需要的地方正确映射它。此部分中的所有其他字段可以保持原样。在该Dependencies部分下,我们只需要Config Server (Spring Cloud Config). 最后工程模板就完成了,我们可以点击Generate底部的下载工程。

注意:Spring Initializr 通过页面右栏中的月亮或太阳图标以暗模式或亮模式显示。

生成会将项目下载为 zip,因此我们可以将其解压缩并将其与其他服务一起移动到我们的项目文件夹中。在您最喜欢的 IDE 中打开项目,让我们开始编码吧!

包含我们在 Spring Initializr 上设置的pom.xml依赖项和软件版本,以便我们可以移动到application.properties文件src/main/resources夹中的文件。

server.port=8888spring.cloud.config.server.git.uri=${HOME}/Projects/config/microservices-java-config

由于我们可能有多个服务在运行,因此我们需要指定此应用程序要使用的端口 ,以便其流量不会与其他服务冲突。Spring Cloud Config 服务器的默认端口是8888,所以我们将使用它。接下来,我们将在本地使用git对我们的配置文件进行版本跟踪,因此我们需要指定文件夹(或公共存储库 URL,如果我们有的话)作为第二个属性的值。

进入项目代码!

配置服务器 – 项目代码

由于我们使用的是默认设置,因此我们需要添加的内容很少。我们目前不需要任何大的自定义或功能。因此,我们只需要在
ConfigServerApplication.java
类中添加一个小注释。

爪哇

@SpringBootApplication@EnableConfigServerpublic class ConfigServerApplication {    public static void main(String[] args) {        SpringApplication.run(ConfigServerApplication.class, args);    }}

注解通知 Spring该@EnableConfigServer应用程序需要作为配置服务器运行。

现在我们需要添加包含数据库凭据的配置文件!

存储配置值

我们需要一个外部化的地方来存放我们的配置值,即一个包含我们的数据库凭据的文件,供配置服务器检索。您在 Spring Cloud Config 上找到的大多数教程都建议从包含 a.properties.yaml文件的本地配置文件夹开始。我为这个项目使用了 YAML 文件。

该文件的示例位于Github 项目microservices-java-config的文件夹中。

YAML

spring:  neo4j:    uri: <insert Neo4j URI here>    database: <insert Neo4j database here>    authentication:      username: <insert Neo4j username here>      password: <insert Neo4j password here>

我们需要填写我们的 Neo4j AuraDB 免费实例的值来代替上面显示的虚拟 URL、数据库、用户名和密码。注意:数据库应该是neo4j,除非您专门使用命令来更改默认值。然后,我们需要保存文件并通过从命令行运行下一条语句将其签入git 。

microservices-java-config % git initmicroservices-java-config % git addmicroservices-java-config % git commit -am "Initial commit"

让我们测试我们的配置服务器应用程序!

测试配置服务器

从 IDE 或命令行启动应用程序。为了进行测试,我们需要找出正确的 ping URL。首先,我们在本地运行应用程序并将端口设置为8888,所以 URL 的第一部分是localhost:8888。在大多数教程中,URL 的其余部分让我感到困惑,但是一旦您知道应用程序在寻找什么,它就不会那么令人生畏了。

许多教程使用该/{application}/{profile}符 。该/{application}部分引用了您为客户端应用程序指定的名称。这是一个任意名称,除了您的配置文件(在我们的示例中为 yaml)需要具有相同的名称。配置文件命名遵循模式{application}-{profile}. 如果您没有-{profile}在配置文件名上指定(例如,开发、生产),它将使用默认配置文件。

由于我们的配置文件被命名neo4j-client.yaml,我们的应用程序名称是neo4j-client. 我们没有在配置文件名上指定配置文件,因此它将使用默认值。这意味着/{profile}URL 的一部分是default.

我们的完整测试 URL 是
localhost:8888/neo4j-client/default
!

结果

接下来,我们需要插入我们的客户端服务 ( service4) 以使用我们刚刚设置的配置服务器。

Service4 – 修改

我们有一个现有的 Neo4j 微服务,所以我们需要做一些调整。首先,我们需要为 Spring Cloud Config 客户端添加一个依赖项。打开pom.xml并添加以下项目:

XML

<properties>    //java version property    <spring-cloud.version>2021.0.3</spring-cloud.version></properties><dependencies>    //other dependencies    <dependency>        <groupId>org.springframework.cloud</groupId>        <artifactId>spring-cloud-starter-config</artifactId>    </dependency></dependencies><dependencyManagement>    <dependencies>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-dependencies</artifactId>            <version>${spring-cloud.version}</version>            <type>pom</type>            <scope>import</scope>        </dependency>    </dependencies></dependencyManagement>

在上述代码的第三行,我们为 Spring Cloud 版本添加了一个属性。这允许我们在 pom.xml 中任何需要它的地方获取这个值。在依赖项部分,我们需要添加配置客户端依赖项(第七行),使该应用程序成为将使用配置服务器的客户端。最后但同样重要的是,我们添加了一个依赖管理部分(第 12 行)来处理 Spring Cloud 的版本控制。

现在我们需要更新src/main/resources文件夹中的应用程序属性。

server.port=8083spring.application.name=neo4j-clientspring.config.import=configserver:http://localhost:8888/

我们不理会端口属性,但我们可以删除数据库凭据属性,因为这些属性现在存储在配置服务器中。接下来的两个属性指定应用程序名称和配置服务器的运行位置。请记住,我们的应用程序名称和配置文件的名称必须匹配。所以,这意味着我们spring.application.name需要是neo4j-client,因为我们的配置文件名是neo4j-client.yaml. 这也是微服务之间或服务发现之间引用的名称,尽管我们还没有深入研究微服务的那一部分。我们的配置服务器在本地运行,并且在默认配置服务器端口上,所以最后一个属性的值应该看起来很熟悉。

这实际上包含了我们对 Neo4j 服务的所有更改!我们不需要更改Service4Application.java类中的任何内容,因为我们所有的配置值都是作为环境的一部分注入的,所以一切都在后台运行。

让我们测试一下!

进行测试

我们将从下到上开始。首先,确保 Neo4j AuraDB 实例仍在运行。注意: AuraDB 免费套餐会在 3 天后自动暂停。play您可以使用实例上的图标恢复。

接下来,我们需要config-server通过 IDE 或命令行启动我们的应用程序。运行后,我们可以service4通过 IDE 或命令行启动应用程序。是时候使用以下命令测试应用程序了。

1. 测试配置服务器是否正常工作:打开浏览器并使用 进入
localhost:8888/neo4j-client/default
或进入命令行curl
localhost:8888/neo4j-client/default

2.service4实时测试:打开浏览器并使用 进入localhost:8083/neo或进入命令行curl localhost:8083/neo

3. 测试后端评论 api:打开浏览器并使用 . 进入
localhost:8083/neo/reviews
或进入命令行curl
localhost:8083/neo/reviews

4. 测试某本书的reviews api:打开浏览器,进入
localhost:8083/neo/reviews/178186
或进入命令行curl localhost:8083/neo/178186

这是评论api结果的结果输出!

查找 1000 条评论

按书查找评论

总结

今天,我们合并了 Spring Cloud Config 项目来管理和向我们的 Neo4j 微服务提供数据库凭据。我们创建了一个新服务来托管配置服务器并设置一个包含我们的数据库凭据的外部 YAML 文件。service4在继续将我们的应用程序作为客户端插入以使用配置服务器提供的值之前,我们看到了如何测试这些部分并验证配置服务器是否正常工作。客户端服务不需要太多代码更改来执行此操作,然后我们一起测试了这些组件(配置服务器、配置文件、Neo4j 微服务),以确保我们可以按预期访问我们的评论数据。

快乐编码!

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年7月1日
下一篇 2022年7月1日

相关推荐