微服务篇——微服务架构及组件

Posted 码云铁粉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务篇——微服务架构及组件相关的知识,希望对你有一定的参考价值。

 1、微服务架构的常见问题及相应的组件

一旦采用微服务系统架构,就势必会遇到这样几个问题:
这么多小服务,如何管理他们?(服务治理 注册中心[服务注册 发现 剔除])     nacos


这么多小服务,他们之间如何通讯?(restful rpc dubbo feign)    

httpclient("url",参数),  springBoot  restTemplate("url",参数) ,   feign


这么多小服务,客户端怎么访问他们?(网关)     gateway


这么多小服务,一旦出现问题了,应该如何自处理?(容错)     sentinel


这么多小服务,一旦出现问题了,应该如何排错? (链路追踪)   skywalking

对于上面的问题,是任何一个微服务设计者都不能绕过去的,因此大部分的微服务产品都针对每一个问题提供了相应的组件来解决它们。

 当一个请求进来我们会通过gateway网关去注册中心当中去拉取我们的服务列表,然后呢,再通过我们的本地负载均衡器ribbon进行路由到对应的服务,我们也可以结合我们的sentinel,来进行一系列的容错手段,包括我们的限流啊,降级等等,然后服务之间的这个调用呢,我们通过Feigin来进行优雅的一个调用,那么在分布式这个架构当中呢,存在一个事务的一致性的问题呢,我们通过SEATA来进行解决。

2、SpringCloud Alibaba微服务解决方案

1. 概述

    Spring Cloud Alibaba 是Spring Cloud的一个子项目,致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。

2. 核心组件分析

Spring Cloud Alibaba 默认提供了如下核心功能(先了解):

服务限流降级:
        默认支持 WebServlet、OpenFeign、RestTemplate、Spring Cloud Gateway, RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
服务注册与发现:
        基于Spring Cloud 服务注册与发现标准,借助Nacos进行实现,默认还集成了 Ribbon 的支持。
分布式配置管理:
        基于Nacos支持分布式系统中的外部化配置,配置更改时自动刷新。
消息驱动能力:
        基于Spring Cloud Stream 为微服务应用构建消息驱动能力。
分布式事务:
        使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。
分布式任务调度:
        提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker上执行。

3. 解决方案架构设计

    基于Spring Cloud Alibaba实现的微服务,解决方案设计架构如图所示:

4. 构建SpringCloud 聚合项目并进行环境初始化

4.1 工程结构

cgb2106-4 (工作区/空项目)
├── 01-sca   //(微服务父工程)
     ├── sca-provider         //服务提供方
     ├── sca-consumer         //服务消费方
     ├── sca-gateway          //网关服务,这个工程后续会作为服务的访问入口

4.2 添加对应的依赖

参考网址:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

    在pom文件中,添加如下依赖:

<!--    maven的父工程为一个pom工程,此工程主要负责依赖版本及部分基础依赖的管理-->
    <dependencyManagement>
        <dependencies>
            <!--Spring Boot 依赖(定义了微服务规范)-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>$spring.boot.version</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
            <!--Spring Cloud 依赖(定义了微服务规范)-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR9</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
            <!--Spring Cloud Alibaba依赖(基于spring微服务规范做了具体落地实现)-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.6.RELEASE</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>

5. 总结

    总之,微服务是一个架构设计方式,此架构中的每个服务(service)都是针对一组功能而设计的,并专注于解决特定的问题。如果开发人员逐渐将更多代码增加到一项服务中并且这项服务变得复杂,那么可以将其拆分成多项更小的服务。接下来进行独立的开发、测试、部署、运行、维护。进而更好,更灵活的处理客户端的请求并提高系统的可靠性,可扩展性。

JHipster创建微服务及相关微服务架构组件介绍

参考链接:

一.创建微服务

微服务是一种JHipster应用程序,它没有前端(必须在网关)上生成Angular前端),并且可以与JHipster Registry一起配置,发现和管理。

创建微服务应用

安装:

  1. 安装Java 8 from the Oracle website.
  2. 安装Node.js from the Node.js website (请安装 64-bit version)
  3. 安装npm包: npm install -g npm
  4. 如果你想使用jhipster应用市场, 请安装 Yeoman: npm install -g yo
  5. 最后安装JHipster: npm install -g generator-jhipster

执行jhipster:

//首先要创建一个工程文件夹,然后切换到当前文件夹下
mkdir myapp
cd myapp
//也可以一个命令完成
mkdir myapp && cd myapp
//然后运行
jhipster

生成微服务时的问题:

//选择应用
1.Which *type* of application would you like to create? Microservice gateway
    Monolithic application (recommended for simple projects)  //单体应用
    Microservice application // 微服务应用
    Microservice gateway // 微服务网关
    // 微服务架构下的用户授权和认证服务
    JHipster UAA server (for microservice OAuth2 authentication) 
//应用的名称,括号里就是当前文件夹的名称,也是推荐的名称
2.What is the base name of your application? gateway
//设置服务的端口号
3.As you are running in a microservice architecture, on which port would like your server to run? It should be unique to avoid port conflicts. 8086
//Java代码都会创建到这个包路径下
4.What is your default Java package name? com.transsion.demo
//选择注册中心。一般选择Registry比较多
5.Which service discovery server do you want to use? JHipster Registry (uses Eureka, provides Spring Cloud Config support and monitoring dashboards)
    JHipster Registry (uses Eureka)
    Consul
    No service discovery
//选择什么类型的认证方式,不管用的什么认证方式,服务器端都用Spring Security实现,而不是Apache Shiro。
6.Which *type* of authentication would you like to use? JWT authentication (stateless, with a token)
    // JWT(JSON Web Token)是一种服务器端无状态(stateless)的认证方式,后两个是有状态的(Stateful)
    JWT authentication (stateless, with a token)  // jwt
    // Oauth2 OIDC 认证服务
    OAuth 2.0 / OIDC Authentication (stateful, works with Keycloak and Okta)
    // Oauth2+jwt Uaa认证服务
    Authentication with JHipster UAA server (the server must be generated separately) 
//选择数据库支持Nosql跟常见RDMB数据库
  7.Which *type* of database would you like to use? SQL (H2, MySQL, MariaDB, PostgreSQL, Oracle, MSSQL)
    //用Spring Data JPA实现。pom会自动加上spring-boot-starter-data-jpa
    SQL (H2, MySQL, MariaDB, PostgreSQL, Oracle, MSSQL)
    //用Spring Data MongoDB实现。pom会自动加上spring-boot-starter-data-mongodb
    MongoDB
    //用Spring Data Couchbase实现。pom会自动加上spring-boot-starter-data-couchbase
    Couchbase
    //用Spring Data for Apache Cassandra实现。pom会自动加上spring-boot-starter-data-cassandra
    Cassandra
    No database
//产品环境下用什么数据库,在Spring Boot 的prod profile里配置的数据库 
8.Which *production* database would you like to use? MySQL
    MySQL
    MariaDB
    PostgreSQL
    Oracle
    Microsoft SQL Server
//开发环境下用什么数据库。也就是在Spring Boot的dev profile里泪痣的数据库
//在开发人员电脑上推荐用H2。MySQL甚至是Oracle只适合安装在测试/产品服务器上
9.Which *development* database would you like to use? MySQL
    //前两个选项用H2作为开发和自测用数据库
    H2 with disk-based persistence  //测试数据写入硬盘,重启应用或系统都不会丢失
    H2 with in-memory persistence   //测试数据只存在于内存,每次重启应用都没啦
    MySQL
/*
是否使用Spring缓存,如果使用就选择实现方式。类似JPA和Hiberante/EclipseLink一样,Spring Cache是一个抽象,允许其他厂商提供自己的实现。Ehcache实现支持本地一个节点缓存,Hazelcast实现支持分布式多节点。Monolithic类型的应用选择Ehcache就可以了。
*/
10.Do you want to use the Spring cache abstraction? Yes, with the Hazelcast implementation (distributed cache, for multiple nodes, supports rate-limiting for gateway applications)
/*
之前选择了SQL类型的数据库,所以用到Spring Data JPA,而且默认用到Hibernate的实现。所以这一步需要选择是否用Hibernate的二级缓存。选择Y。
*/
11.Do you want to use Hibernate 2nd level cache? Yes
/*
用Maven还是Gradle作为后端的构建工具。虽然Gradle有很多高级特性和方便之处,但是目前最常用的就还是Maven。我们选择Maven。
*/
12.Would you like to use Maven or Gradle for building the backend? Maven
//是否还用到其他技术。可选的有Elasticsearch、WebSockets、Apache Kafka...
13.Which other technologies would you like to use? Search engine using Elasticsearch
/*
前端用什么框架。Angular和React选其一。现在还没有正式支持vue,而是以Blueprint的方式提供的。
*/
14.Which *Framework* would you like to use for the client? Angular
WARNING! Could not fetch bootswatch themes from API. Using default ones.
15.Would you like to use a Bootswatch theme (https://bootswatch.com/)? Default JHipster
//支持国际化?
16.Would you like to enable internationalization support? Yes
//选择本地支持的语言包含中文
17.Please choose the native language of the application English
//可以额外安装其他语言
18.Please choose additional languages to install (Press <space> to select, <a> to toggle all, <i> to invert selection)
/*
选择测试框架,针对微服务http接口测试,生成测试报告.JHipster默认前端用Jest,服务器端用JUnit作为单元测试框架。
*/
19.Besides JUnit and Jest, which testing frameworks would you like to use? (Press <space> to select, <a> to toggle all, <i> to invert selection)
    Gatling //性能测试
    Cucumber    //行为测试
    Protractor  //angular集成测试
//从jhipster市场中选择组件安装
20.Would you like to install other generators from the JHipster Marketplace? No

微服务架构中生成实体

如果要实时重载JavaScript/TypeScript代码,则需要运行npm startyarn start。创建应用程序后,将需要创建 实体。例如,您可能要创建一个 AuthorBook 实体。对于每个实体,您将需要:

  • 数据库表
  • Liquibase变更集
  • JPA实体
  • Spring Data JPA Repository
  • Spring MVC REST控制器,具有基本的CRUD操作
  • Angular路由器,组件和服务
  • HTML视图
  • 集成测试,以验证一切正常
  • 性能测试,看一切是否顺利

如果您有多个实体,则可能需要在它们之间建立关系。为此,您将需要:

  • 数据库外键
  • 用于管理这种关系的特定JavaScript和HTML代码

“entity”子生成器将创建所有必要的文件,并为每个实体提供一个CRUD前端(请参阅Angular项目结构React项目结构))。可以通过运行jhipster entity <entityName> --[options]来调用子生成器。可以通过输入jhipster entity --help找到这些选项的参考。

  • --table-name <table_name> - 默认情况下,JHipster将根据您的实体名称生成一个表名,如果您希望使用其他表名,则可以通过传递此选项来实现。
  • --angular-suffix <suffix> - 如果您希望所有Angular路由都具有自定义后缀,则可以使用此选项传递该后缀。
  • --client-root-folder <folder-name> - 指定前端侧实体使用的根文件夹名称。对于富应用和微服务中的网关,默认情况下为空。
  • --regenerate - 不询问任何问题重新生成现有实体。
  • --skip-server - -这将跳过服务器端代码,仅生成前端代码。
  • --skip-client - 这将跳过前端代码,仅生成服务器端代码。
  • --db - -跳过服务器端生成时,指定的数据库,其他时候无效。

使用了JDL Studio:jdl官方语法文档

  • 您可以使用import-jdl子生成器通过运行jhipster import-jdl your-jdl-file.jh从JDL文件生成实体。

    • 如果您不想在导入JDL时重新生成实体,则可以使用--json-only标识来跳过实体创建部分,仅在.jhipster文件夹中生成json文件。
    jhipster import-jdl ./my-jdl-file.jdl --json-only
    • 默认情况下, import-jdl仅重新生成已更改的实体,如果要重新生成所有实体,则传递--force标识。请注意,这将覆盖您对实体文件的所有本地更改
    jhipster import-jdl ./my-jdl-file.jdl --force
  • 如果要使用JHipster UML代替import-jdl子生成器,则需要先通过运行npm install -g jhipster-uml来安装它,然后运行jhipster-uml yourFileName.jh

字段类型

JHipster支持许多字段类型。这种支持取决于您的数据库后端,因此我们使用Java类型来描述它们:JavaString将以不同的方式存储在Oracle或Cassandra中,这是JHipster的优势之一,可以为您生成正确的数据库访问代码。

  • String: Java字符串。它的默认大小取决于基础后端(如果使用JPA,默认情况下为255),但是您可以使用校验规则进行更改(例如,修改 max大小为1024)。
  • Integer: Java整数。
  • Long: Java长整数。
  • Float: Java浮点数.
  • Double: Java双精度浮点数.
  • BigDecimal: java.math.BigDecimal对象, 当您需要精确的数学计算时使用(通常用于财务操作)。
  • LocalDate: java.time.LocalDate对象, 用于正确管理Java中的日期。
  • Instant: java.time.Instant对象, 用于表示时间戳,即时间线上的瞬时点。
  • ZonedDateTime: java.time.ZonedDateTime对象, 用于表示给定时区(通常是日历中会议、约定)中的本地日期时间。请注意,REST和持久层都不支持时区,因此您很可能应该使用Instant
  • Duration: java.time.Duration对象, 用于表示时间量。
  • UUID: java.util.UUID对象.
  • Boolean: Java布尔型.
  • Enumeration:Java枚举对象。选择此类型后,子生成器将询问您要在枚举中使用哪些值,并将创建一个特定的enum类来存储它们。
  • Blob: Blob对象,用于存储一些二进制数据。选择此类型时,子生成器将询问您是否要存储通用二进制数据,图像对象或CLOB(长文本)。图像将专门在Angular侧进行优化处理,因此可以将其正常显示给最终用户。

二.JHipster微服务架构概述

“微服务”架构将前端和后端分开,因此您的应用程序可以更轻松地扩展和解决基础架构问题。

JHipster微服务架构以以下方式工作:

  • gateway是JHipster生成的应用程序(生成时选择microservice application 或 microservice gateway),该应用程序处理Web流量,并为Angular/React应用程序提供服务。如果您要遵循Backends for Frontends模式,则可以存在几种不同的网关,但这不是强制性的。
  • Traefik是可以与网关一起使用的现代HTTP反向代理和负载均衡器。
  • JHipster Registry是一个所有应用程序在运行时候在其注册并从中获取其配置的服务。它还提供了运行时监视仪表板。
  • Consul是服务发现服务以及提供键/值存储。它可以用作JHipster Registry的替代服务。
  • JHipster UAA是基于JHipster的用户身份验证和授权系统,它使用OAuth2协议。
  • Microservices是JHipster生成的应用程序(生成时选择microservice application),用于处理REST请求。它们是无状态的,可以并行启动它们的多个实例来达到负载均衡的目的。
  • JHipster Console是基于ELK Stack的监控和告警控制台。

在下图中,绿色组件特定于您的应用程序,蓝色组件提供了其基础结构。

技术图片

三.JHipster API网关

JHipster可以生成API网关。网关是普通的JHipster应用程序,因此您可以在该项目上使用常规的JHipster选项和开发工作流,但它也充当微服务的入口。更具体地说,它为所有微服务提供HTTP路由和负载均衡,服务质量,安全性和API文档

1.架构图

技术图片

2.HTTP请求使用网关进行路由

启动网关和微服务后,它们将在registry中注册自己(使用src/main/resources/config/application.yml文件中的eureka.client.serviceUrl.defaultZone项)。

网关将使用其应用程序名字自动将所有请求代理到微服务:例如,注册微服务app1时,该请求在网关上的/app1URL上可用。

例如,如果您的网关运行在localhost:8080上,则可以指向http://localhost:8080/app1/rest/foos来获取微服务app1服务的foos资源。 如果您尝试使用Web浏览器执行此操作,请不要忘记REST资源在JHipster中是默认保护的,因此您需要发送正确的JWT标头(请参见下面的安全性要点),或在微服务的MicroserviceSecurityConfiguration类删除这些URL安全保护。

3.JWT(JSON Web令牌)

JWT(JSON Web令牌)是一种行业标准、易于使用的方法,用于保护微服务体系结构中的应用程序。JHipster使用Okta提供的JJWT library来实现JWT。令牌由网关生成,并发送到底层微服务:由于它们共享一个公共密钥,因此微服务能够验证令牌并使用该令牌对用户进行身份验证。

这些令牌是自我描述的:它们具有身份验证和授权信息,因此微服务不需要查询数据库或外部系统。这对于确保可扩展的体系结构很重要。

  • 为了确保安全,必须在所有应用程序之间共享JWT秘密令牌。
  • 对于每个应用程序,默认令牌是唯一的,由JHipster生成。它存储在.yo-rc.json文件中。
  • 使用src/main/resources/config/application.yml文件中的jhipster.security.authentication.jwt.secret密钥配置令牌。
  • 要在所有应用程序之间共享此密钥,请将密钥从网关复制到所有微服务,或使用JHipster Registry的Spring Config Server或JHipster的Consul K / V存储的特定配置进行共享。这是人们使用这些中心配置服务器的主要原因之一。
  • 推荐的做法是在开发和生产中使用其他密钥。

4.JHipster UAA

JHipster提供了基于Spring Security生成 “UAA”(用户帐户和身份验证)服务器的选项。该服务器提供OAuth2令牌以保护网关。

网关使用Spring Security的JWT实现将JWT令牌发送到微服务,因此,其工作原理与上述JWT配置基本相同。

5.自动文档

网关暴露了它所代理服务的Swagger API,许多工具依赖此特性,例如Swagger UI和swagger-codegen。

网关的”admin > API”菜单具有特定的下拉列表,其中显示了网关的API以及已注册的微服务中的所有暴露API。

6.限速

网关提供速率限制功能,因此可以限制REST请求的数量:

  • 通过IP地址(对于匿名用户)
  • 通过用户登录(对于已登录的用户)

然后,JHipster将使用Bucket4jHazelcast请求计数,并在超出限制时发送HTTP 429(请求过多)错误。每个用户的默认限制是每小时100,000个API调用。

网关在保护REST端点安全时,可以完全访问用户的安全信息,因此可以轻松地扩展它,以根据用户的安全角色提供特定的速率限制。

要启用速率限制,请打开application-dev.ymlapplication-prod.yml文件,并将enabled设置为true

jhipster:
    gateway:
        rate-limiting:
            enabled: true

数据存储在Hazelcast中,因此,只要配置了Hazelcast分布式缓存,便可以扩展网关,该网关可以直接使用:

  • 默认情况下,所有网关都配置了Hazelcast
  • 如果使用JHipster Registry,则网关的所有实例都应自动在分布式缓存中注册自己

如果要添加更多规则或修改现有规则,则需要在RateLimitingFilter类中对其进行编码。修改示例可能是:

  • 降低HTTP调用的限制
  • 增加每分钟或每天限制
  • 取消“admin”用户的所有限制

7.访问控制策略

默认情况下,所有已注册的微服务都可以通过网关来访问。如果要排除通过网关公开访问的特定API,可以使用网关的特定访问控制策略过滤器。可以使用application-*.yml文件中的jhipster.gateway.authorized-microservices-endpoints密钥对其进行配置:

jhipster:
    gateway:
        authorized-microservices-endpoints: # Access Control Policy, if left empty for a route, all endpoints will be accessible
            app1: /api,/v2/api-docs # recommended dev configuration

例如,如果您只希望微服务bar/api/fooAPI端点可用:

jhipster:
    gateway:
        authorized-microservices-endpoints:
            bar: /api/foo

四.Traefik

Traefik是现代的HTTP反向代理和负载均衡器,旨在轻松部署微服务。它可以像Zuul一样路由HTTP请求,因此它与JHipster网关有些功能重叠,但是它工作在API网关更低的层面:它仅路由HTTP请求,不提供速率限制,安全性或Swagger文档聚合。

Traefik的好处之一是可以与许多不同的服务发现解决方案一起使用:但是,对于JHipster,默认情况下,它仅与 Consul一起使用。它可以应用于两种不同的体系结构样式,如下所述。

架构图1: 默认配置

由于Traefik是反向代理和负载均衡器,因此它取代了Zuul,并将所有HTTP请求直接路由到正确的服务。

技术图片

在这种架构中,JHipster“网关”不再是真正的网关,它主要是在这里为Angular应用程序服务。这是默认配置.

架构图2: Traefik和Zuul

Traefik也可以与Zuul一起使用:在这种情况下,对微服务的HTTP请求,先通过Traefik,然后通过Zuul,然后再到达其目的地。

技术图片

这道中了更多的网络请求,因此效率不如以前的体系结构。但是,这允许充分利用JHipster网关:它可以专心处理速率限制或Swagger文档聚合。

总之,Traefik可以用作边缘服务,从而可以方便扩展JHipster网关。

此配置可与JHipster一起使用,开箱即用:唯一的问题是客户端应用程序使用绝对URL,例如对于”microservice1”:

  • 默认URL是”/services/microservice1”,仅通过Traefik(这是上面的“默认配置”)。
  • “/services/gateway/microservice1” URL将使用在Traefik中配置的”gateway”应用程序,然后使用Zuul来访问”microservice1”应用程序。

入门

Traefik仅适用于Consul,因此,如果您使用 JHipster Registry,则此功能将无效。

在微服务架构中使用Traefik,请运行docker-compose子生成器,并在出现询问您要使用哪个网关的问题时选择Traefik。

这将生成一个用于在Docker中运行Traefik的traefik.yml配置以及一个traefik/traefik.toml文件,该文件是Traefik的配置文件。

设置此配置文件是为了:

由于Traefik使用Consul,因此检查Consul管理UI也很有用,该UI可在端口8500上找到:http://localhost:8500

五.JHipster Registry

JHipster Registry是JHipster团队提供的应用程序。与JHipster生成器一样,它是一个开源,Apache 2-licensed应用程序,其源代码在JHipster组织的GitHub上可用:jhipster/jhipster-registry

JHipster Registry具有三个主要功能:

  • 它是一个Eureka服务,用作应用程序的发现服务。这就是JHipster处理所有应用程序的路由,负载均衡和可伸缩性的方式。
  • 它是一个Spring Cloud配置服务,为所有应用程序运行时提供配置
  • 它还是一台管理服务器,具有用于监视和管理应用程序的仪表板

所有这些功能都通过基于Angular的现代用户界面,打包到一个便利的应用程序中。

使用预打包的WAR文件安装

JHipster Registry在我们的发行页面页面上提供了可执行的WAR文件。

下载WAR文件,并使用您要使用的配置文件(通常是JHipster应用程序)运行它(请参阅关于配置文件的上一节)。例如,要使用存储在central-config目录中的Spring Cloud Config配置运行它:

./jhipster-registry-<version>.jar --spring.security.user.password=admin --jhipster.security.authentication.jwt.secret=my-secret-key-which-should-be-changed-in-production-and-be-base64-encoded --spring.cloud.config.server.composite.0.type=native --spring.cloud.config.server.composite.0.search-locations=file:./central-config

// demo
java -jar jhipster-registry-6.1.1.jar --spring.security.user.password=admin --jhipster.security.authentication.jwt.secret=ZjczYmZkMzRlZWQ5NjJjNDNhNTlhNzg0ZTQwOTAzMWFmN2RhOTlhYmY0OGVlOGVmZjhlYWU0NTdhOGZlNGNhODFjZWJhYmU4NjIyYzhlNWFlNTE3N2RkOWM2OTMyZWZiNDQ3ZGM3ZjU0ZGFmZGU2NjcyMDU3MmE1YmFmNDVjZTk= --spring.cloud.config.server.composite.0.type=native --spring.cloud.config.server.composite.0.search-locations=file:./central-config

请注意,通过使用JHIPSTER_SECURITY_AUTHENTICATION_JWT_SECRET环境变量或使用如上所述的参数,向启动时的registry提供JWT密钥很重要。另一种可能的方法是在集中式配置源的application.yml文件中设置此值(该文件在启动时由所有应用程序(包括registry)加载)。

请注意,自JHipster 5.3.0起,我们有了一个新的jhipster.security.authentication.jwt.base64-secret属性,该属性更安全,但是由于您可能仍使用旧版本,因此我们也使用jhipster.security.authentication.jwt.secret属性。有关这些属性的更多信息,请参考我们的安全性文档

同样,要使用prod配置文件运行registry,请根据您的设置调整参数,例如:

./jhipster-registry-<version>.jar --spring.profiles.active=prod --spring.security.user.password=admin --jhipster.security.authentication.jwt.secret=my-secret-key-which-should-be-changed-in-production-and-be-base64-encoded --spring.cloud.config.server.composite.0.type=git --spring.cloud.config.server.composite.0.uri=https://github.com/jhipster/jhipster-registry-sample-config

./jhipster-registry-<version>.jar --spring.profiles.active=prod --spring.security.user.password=admin --jhipster.security.authentication.jwt.secret=my-secret-key-which-should-be-changed-in-production-and-be-base64-encoded --spring.cloud.config.server.composite.0.type=git --spring.cloud.config.server.composite.0.uri=https://github.com/jhipster/jhipster-registry --spring.cloud.config.server.composite.0.search-paths=central-config

从源码构造安装

可以直接从jhipster/jhipster-registry克隆/fork/下载JHipster Registry。由于JHipster Registry也是JHipster生成的应用程序,因此您可以像其他任何JHipster应用程序一样运行它:

  • 使用./mvnw(用于Java服务器)在开发环境中运行它,并使用yarn start(用于管理前端)运行,默认情况下它将使用dev配置文件,并且可以从http://127.0.0.1:8761/访问。
  • 使用./mvnw -Pprod package将其打包到生产环境中,并生成通常的JHipster可执行WAR文件。然后,您可以使用devprod Spring配置文件运行WAR文件,例如:./jhipster-registry-<version>.jar --spring.profiles.active=prod

请注意,要使用devcomposite配置文件,您需要在配置中包含一个central-config目录,因此,如果运行./jhipster-registry-<version>.jar --spring.profiles.active=dev,您将需要建立该目录。

以上是关于微服务篇——微服务架构及组件的主要内容,如果未能解决你的问题,请参考以下文章

JHipster创建微服务及相关微服务架构组件介绍

微服务架构SpringCloud之Eureka(服务注册和服务发现基础篇)

微服务架构SpringCloud之Eureka(服务注册和服务发现基础篇)

Java面试题超详细讲解微服务系列之十六SpringCloud篇

解析微服务架构:微服务重构应用及IBM解决方案

微服务架构架构实战篇:一个可供中小团队参考的微服务架构技术栈