Gateway Gateway e Nacos

Primeiros passos com Gateway e Nacos

1. Análise de arquitetura

Se houver muito mais microsserviços em um projeto, haverá desvantagens no método de solicitação direta de microsserviços do front-end. O front-end configura um caminho absoluto para cada endereço de solicitação, o que não conduz à manutenção do sistema. Por exemplo, o solicite o gerenciamento do sistema no código a seguir O endereço do serviço usa localhost

Insira a descrição da imagem aqui

Quando o sistema fica online, ele precisa ser alterado para o nome de domínio da rede pública. Se houver muitos desses endereços, será muito problemático.

Com base neste problema, um gateway pode ser utilizado para resolvê-lo, conforme mostrado abaixo:
Insira a descrição da imagem aqui

Então, com base no gateway, o front-end solicita diretamente o endereço do microsserviço e só precisa especificar o caminho relativo de cada interface.
Insira a descrição da imagem aqui

Além disso, o backend também pode alterar o endereço de acesso ao microsserviço para o endereço de acesso ao gateway, e então o gateway realiza o roteamento.

Insira a descrição da imagem aqui

O gateway pode rotear solicitações para microsserviços específicos, reduzindo o custo de microsserviços externos.Além disso, o gateway também pode implementar funções como controle de autoridade e limitação de corrente.

Então pode-se ver na figura que o gateway está implantadoprocessodo seguinte modo:

1. Inicie o microsserviço e registre-se no Nacos. O Nacos registra o endereço de cada instância do microsserviço.

2. O gateway lê a lista de serviços do Nacos, incluindo nome do serviço, endereço do serviço, etc.

3. A solicitação chega ao gateway e o gateway encaminha a solicitação para o microsserviço específico.

2. Construa Nacos

Centro de descoberta de serviços

Para usar o gateway, primeiro construa o Nacos. O Nacos tem duas funções:

1. Centro de descoberta de serviços.

O microsserviço se registra no Nacos e o gateway obtém a lista de microsserviços do Nacos.

2. Centro de configuração.

Existem muitos microsserviços e suas informações de configuração também são muito complexas.Para fornecer manutenção do sistema, as informações de configuração dos microsserviços são unificadas na configuração do Nacos.

Existem dois conceitos que precisam ser entendidos antes de construir o centro de descoberta de serviços Nacos:namespace e grupo

namespace: usado para distinguir ambientes, como ambiente de desenvolvimento, ambiente de teste e ambiente de produção.

grupo: usado para distinguir projetos, como: projeto xuecheng-plus, projeto xuecheng2.0

Primeiro configure o namespace no nacos:

Após fazer login no Nacos, clique em "Namespace" no menu esquerdo para entrar na interface de gerenciamento de namespace.

Insira a descrição da imagem aqui

Clique em “Novo Namespace” e preencha as informações relevantes do namespace. Como mostrado abaixo:

Insira a descrição da imagem aqui

Registre mensagens de microsserviço no Nacos

  1. Primeiro adicione o gerenciamento de dependências
<dependency>  
    <groupId>com.alibaba.cloud</groupId>  
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>  
    <version>Hoxton.SR9</version>  
    <type>pom</type>  
    <scope>import</scope>  
</dependency>
<!--Nacos服务注册依赖-->
<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
   <version>2.3.7.RELEASE</version> 
</dependency>

2. Configure o endereço dos nacos

Configure as seguintes informações no arquivo de configuração:


spring:  
  application:  
    name: content-api  #微服务名称
  cloud:  
    nacos:  
      server-addr: 192.168.101.65:8848  #Nacos地址
      discovery:  
        namespace: dev  #命名空间
        group: xuecheng-plus-project #组

Reinicie o serviço.

Entre no serviço Nacos para visualizar a lista de serviços e descobrir que há mensagens de microsserviços registradas

Insira a descrição da imagem aqui

Centro de configuração

Configurar três elementos

Após a construção do centro de descoberta de serviços Nacos, o Nacos é construído abaixo como centro de configuração, cujo objetivo é gerenciar todas as configurações do projeto através do Nacos.

Primeiro classifique os arquivos de configuração no projeto:

1. Configuração única para cada projeto

Significa que a configuração só precisa ser definida em alguns projetos, ou a configuração possui valores diferentes em cada projeto.

Por exemplo: spring.application.name precisa ser configurado para cada projeto, mas o valor é diferente, e alguns projetos precisam se conectar ao banco de dados, mas outros não, e alguns projetos precisam configurar filas de mensagens, mas outros não.

2. Configuração comum ao projeto

Refere-se à configuração em que o conteúdo da configuração é o mesmo em vários projetos. Por exemplo: configuração do redis, muitos projetos usam o mesmo conjunto de serviços redis, então a configuração é a mesma.

Além disso, você precisa saber como o nacos localiza um arquivo de configuração específico, a saber:namespace, grupo, dataid.

1. Encontre o ambiente específico e os projetos específicos por meio de namespace e grupo.

2. Encontre o arquivo de configuração específico por meio do dataid, o dataid consiste em três partes

Por exemplo: o arquivo de configuração content-service-dev.yaml consiste em três partes (content-service)-(dev).(yaml)

content-service: A primeira parte, que é o nome da aplicação configurada em application.yaml, ou seja, o valor de spring.application.name.

dev: A segunda parte, é o nome do ambiente, especificado por spring.profiles.active,

Yaml: A terceira parte é o sufixo do arquivo de configuração. Atualmente, nacos suporta propriedades, yaml e outros tipos de formato. Este projeto escolhe o tipo de formato yaml.

Aprovado quando iniciamos o projetoprimavera.perfis.ativosO parâmetro determina qual arquivo de configuração do ambiente é referenciado. Por exemplo, passar spring.profiles.active=dev significa usar o arquivo de configuração do ambiente de desenvolvimento, ou seja, content-service-dev.yaml.

Por exemplo

1. Clique no sinal de mais para adicionar configuração

Insira a descrição da imagem aqui

2. Editar configuração

Insira a descrição da imagem aqui

3. Adicione dependências


 <!--微服务配置依赖-->
 <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.2.6.RELEASE</version> 
</dependency>

Modificar configuração no arquivo de configuração

(Veja a frente para detalhes)

YAML
spring:
  application:
    name: content-service
  cloud:
    nacos:
      server-addr: 192.168.101.65:8848
      discovery:
        namespace: dev
        group: xuecheng-plus-project
      config:
        namespace: dev
        group: xuecheng-plus-project
        file-extension: yaml
        refresh-enabled: true

#profiles默认为dev
  profiles:
    active: dev 

Após a conclusão da configuração, execute o arquivo de teste de unidade do projeto para ver se ele pode ser testado normalmente.O método de teste de unidade de rastreamento pode ler os dados do banco de dados normalmente, indicando que as informações de configuração lidas do nacos são normais.

Configuração comum

Se houver configurações a serem escritas repetidamente ou configurações públicas, como configurar as configurações públicas do projeto no nacos?

nacos fornece configurações compartilhadas para introduzir configurações comuns.

Por exemplo, se o swagger estiver configurado na API de conteúdo, todos os projetos de interface precisam ser configurados com o swagger. Aqui, a configuração do swagger pode ser definida como uma configuração pública e qualquer projeto pode ser importado.

Crie a configuração pública de xuecheng-plus separadamente no grupo xuecheng-plus-common, entre no ambiente de desenvolvimento de nacos e adicione a configuração pública de swagger-dev.yaml

[Falha na transferência de imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendado salvar a imagem e carregá-la diretamente (img-OSLuJRO1-1689594280792)(file:///C:/Users/a2262/Pictures /Typedown/c50152f7-1c78 -4a9a-aca4-139482cc8dc8.png)]

Em seguida, marque as informações de configuração compartilhada no arquivo de configuração

YAML
spring:
  application:
    name: content-api
  cloud:
    nacos:
      server-addr: 192.168.101.65:8848
      discovery:
        namespace: dev
        group: xuecheng-plus-project
      config:
        namespace: dev
        group: xuecheng-plus-project
        file-extension: yaml
        refresh-enabled: true #开启自动更新配置
        extension-configs: #扩展配置,下面是扩展配置的信息(Nacos中的配置)
          - data-id: content-service-${
    
    spring.profiles.active}.yaml
            group: xuecheng-plus-project
            refresh: true
        shared-configs: #共享配置,下面是共享配置的信息
          - data-id: logging-${
    
    spring.profiles.active}.yaml
            group: xuecheng-plus-common
            refresh: true
  profiles:
    active: dev #环境,也是后缀

Nova configuração

[Falha na transferência de imagem do link externo, o site de origem pode ter um mecanismo de link anti-roubo, é recomendado salvar a imagem e carregá-la diretamente (img-PxnA3s17-1689594280793)(file:///C:/Users/a2262/ Imagens/Typedown/67e1ad57-181d -4bfd-b5a6-0e2800fb4022.png)]

Após a conclusão da configuração, reinicie o projeto para ver se há um resultado de configuração correspondente, se houver, significa que a configuração foi bem-sucedida

Configurar prioridade

A ordem em que o SpringBoot lê os arquivos de configuração é a seguinte:

Insira a descrição da imagem aqui

As formas de introdução dos arquivos de configuração são:

1. Introduzir pelo nome do aplicativo do projeto

2. Introduzir através do arquivo de configuração estendido

3. Introduzir via arquivo de configuração compartilhado

4. Arquivo de configuração local

A prioridade de cada arquivo de configuração: arquivo de configuração do nome do aplicativo do projeto > arquivo de configuração estendido > arquivo de configuração compartilhado > arquivo de configuração local.

Se quisermos dar prioridade ao local, podemos configurá-lo no arquivo de configuração do nacos da seguinte forma:

#配置本地优先  
spring:  
 cloud:  
  config:  
    override-none: true

3. Construir portal

Precisamos criar um projeto de gateway.

1. Crie um novo projeto de gateway.

Insira a descrição da imagem aqui

2. Estrutura do projeto

Insira a descrição da imagem aqui

3. Adicione dependências


<artifactId>xuecheng-plus-gateway</artifactId>

<dependencies>

    <!--网关-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
        <version>2.2.6.RELEASE</version>
    </dependency>

    <!--服务发现中心-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>2.2.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        <version>2.2.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.83</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.16</version>
    </dependency>
    <!-- 排除 Spring Boot 依赖的日志包冲突 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>2.3.7.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- Spring Boot 集成 log4j2 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
        <version>2.3.7.RELEASE</version>
    </dependency>


</dependencies>

4. Configure o arquivo de configuração bootstrap.yaml do gateway

YAML
#微服务配置
spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: 192.168.101.65:8848
      discovery:
        namespace: dev
        group: xuecheng-plus-project
      config:
        namespace: dev
        group: xuecheng-plus-project
        file-extension: yaml
        refresh-enabled: true
        shared-configs:
          - data-id: logging-${
    
    spring.profiles.active}.yaml
            group: xuecheng-plus-common
            refresh: true


  profiles:
    active: dev

5. Configure a política de roteamento do gateway em nacos:

Insira a descrição da imagem aqui

A configuração é a seguinte

YAML
server:
  port: 63010 # 网关端口
spring:
  cloud:
    gateway:
#      filter:
#        strip-prefix:
#          enabled: true
      routes: # 网关路由配置,这下面是我的几个微服务信息
        - id: content-api # 路由id,自定义,只要唯一即可
          # uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址
          uri: lb://content-api # 路由的目标地址 lb就是负载均衡,后面跟服务名称
          predicates: # 路由断言,也就是判断请求是否符合路由规则的条件
            - Path=/content/** # 这个是按照路径匹配,只要以/content/开头就符合要求
#          filters:
#            - StripPrefix=1
        - id: system-api
          # uri: http://127.0.0.1:8081
          uri: lb://system-api
          predicates:
            - Path=/system/**
#          filters:
#            - StripPrefix=1
        - id: media-api
          # uri: http://127.0.0.1:8081
          uri: lb://media-api
          predicates:
            - Path=/media/**
#          filters:
#            - StripPrefix=1


6. Altere o endereço que solicita o microsserviço para o endereço do gateway

por exemplo

Insira a descrição da imagem aqui

ou

Insira a descrição da imagem aqui

Inicie o teste de engenharia, se a solicitação for normal, a implantação foi bem-sucedida

Acho que você gosta

Origin blog.csdn.net/m0_71106830/article/details/131773625
Recomendado
Clasificación