百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 博客教程 > 正文

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

connygpt 2024-10-19 04:01 8 浏览

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


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

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

在本文中,我们将介绍如何设置托管 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=8888
spring.cloud.config.server.git.uri=${HOME}/Projects/config/microservices-java-config


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

进入项目代码!

配置服务器 - 项目代码

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

爪哇

@SpringBootApplication
@EnableConfigServer
public 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 init
microservices-java-config % git add
microservices-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=8083

spring.application.name=neo4j-client
spring.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 微服务),以确保我们可以按预期访问我们的评论数据。

快乐编码!



相关推荐

3分钟让你的项目支持AI问答模块,完全开源!

hello,大家好,我是徐小夕。之前和大家分享了很多可视化,零代码和前端工程化的最佳实践,今天继续分享一下最近开源的Next-Admin的最新更新。最近对这个项目做了一些优化,并集成了大家比较关注...

干货|程序员的副业挂,12个平台分享

1、D2adminD2Admin是一个完全开源免费的企业中后台产品前端集成方案,使用最新的前端技术栈,小于60kb的本地首屏js加载,已经做好大部分项目前期准备工作,并且带有大量示例代码,助...

Github标星超200K,这10个可视化面板你知道几个

在Github上有很多开源免费的后台控制面板可以选择,但是哪些才是最好、最受欢迎的可视化控制面板呢?今天就和大家推荐Github上10个好看又流行的可视化面板:1.AdminLTEAdminLTE是...

开箱即用的炫酷中后台前端开源框架第二篇

#头条创作挑战赛#1、SoybeanAdmin(1)介绍:SoybeanAdmin是一个基于Vue3、Vite3、TypeScript、NaiveUI、Pinia和UnoCSS的清新优...

搭建React+AntDeign的开发环境和框架

搭建React+AntDeign的开发环境和框架随着前端技术的不断发展,React和AntDesign已经成为越来越多Web应用程序的首选开发框架。React是一个用于构建用户界面的JavaScrip...

基于.NET 5实现的开源通用权限管理平台

??大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!??今天小编推荐一款基于.NE...

StreamPark - 大数据流计算引擎

使用Docker完成StreamPark的部署??1.基于h2和docker-compose进行StreamPark部署wgethttps://raw.githubusercontent.com/a...

教你使用UmiJS框架开发React

1、什么是Umi.js?umi,中文可发音为乌米,是一个可插拔的企业级react应用框架。你可以将它简单地理解为一个专注性能的类next.js前端框架,并通过约定、自动生成和解析代码等方式来辅助...

简单在线流程图工具在用例设计中的运用

敏捷模式下,测试团队的用例逐渐简化以适应快速的发版节奏,大家很早就开始运用思维导图工具比如xmind来编写测试方法、测试点。如今不少已经不少利用开源的思维导图组件(如百度脑图...)来构建测试测试...

【开源分享】神奇的大数据实时平台框架,让Flink&amp;Spark开发更简单

这是一个神奇的框架,让Flink|Spark开发更简单,一站式大数据实时平台!他就是StreamX!什么是StreamX大数据技术如今发展的如火如荼,已经呈现百花齐放欣欣向荣的景象,实时处理流域...

聊聊规则引擎的调研及实现全过程

摘要本期主要以规则引擎业务实现为例,陈述在陌生业务前如何进行业务深入、调研、技术选型、设计及实现全过程分析,如果你对规则引擎不感冒、也可以从中了解一些抽象实现过程。诉求从硬件采集到的数据提供的形式多种...

【开源推荐】Diboot 2.0.5 发布,自动化开发助理

一、前言Diboot2.0.5版本已于近日发布,在此次发布中,我们新增了file-starter组件,完善了iam-starter组件,对core核心进行了相关优化,让devtools也支持对IAM...

微软推出Copilot Actions,使用人工智能自动执行重复性任务

IT之家11月19日消息,微软在今天举办的Ignite大会上宣布了一系列新功能,旨在进一步提升Microsoft365Copilot的智能化水平。其中最引人注目的是Copilot...

Electron 使用Selenium和WebDriver

本节我们来学习如何在Electron下使用Selenium和WebDriver。SeleniumSelenium是ThoughtWorks提供的一个强大的基于浏览器的开源自动化测试工具...

Quick &#39;n Easy Web Builder 11.1.0设计和构建功能齐全的网页的工具

一个实用而有效的应用程序,能够让您轻松构建、创建和设计个人的HTML网站。Quick'nEasyWebBuilder是一款全面且轻巧的软件,为用户提供了一种简单的方式来创建、编辑...