Compartilhamento de tecnologia

Notas práticas do Grain Mall-27-Componentes distribuídos-SpringCloud-Gateway-Creation

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

O conteúdo principal desta seção é criar o módulo gateway, registrar o gateway no Nacos e configurar o roteamento para teste.

1. Crie um módulo de gateway

Clique com o botão direito no projetoNew->Module, crie um novo módulo, nome do módulo gulimall-gateway

Insira a descrição da imagem aqui

Preencha diversas informações.

Insira a descrição da imagem aqui

Selecione Dependência de gateway.

Insira a descrição da imagem aqui
Clique em Criar para criar o módulo.

2. Configuração do serviço de gateway

1. Depende do módulo comum

		<dependency>
            <groupId>com.atguigu.gulimall</groupId>
            <artifactId>gulimall-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

Como o serviço de gateway também precisa usar o centro de registro e o centro de configuração, ele requer dependências de pacotes relacionadas, que são obtidas com base no módulo comum.

2. Inicie a descoberta de serviço

Ao adicionar anotações à classe de inicialização, o serviço pode ser registrado no centro de registro após a inicialização.

@EnableDiscoveryClient
  • 1

3. Crie um arquivo de configuração

Crie três novos arquivos de configuração no diretório de recursos.

① aplicação.propriedades

Configure as informações relacionadas ao centro de registro do Nacos.

server.port=80
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.application.name=gulimall-gateway
  • 1
  • 2
  • 3

② bootstrap.propriedades

Configure as informações relevantes do centro de configuração do Nacos. Observe que um namespace denominado gateway deve ser criado no Nacos antecipadamente.

Insira a descrição da imagem aqui

spring.application.name=gulimall-gateway
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.namespace=405d2201-d62b-4203-80c8-800e9387ad40
  • 1
  • 2
  • 3

③ aplicação.yml

Neste arquivo, escreva a configuração de roteamento do gateway. Consulte a próxima seção para obter detalhes.

3. Configuração de roteamento do gateway

1. Configuração de roteamento

Nesta parte, tomamos dois requisitos reais como exemplos para praticar como configurar o gateway.

A função do gateway é encaminhar as solicitações recebidas aos serviços correspondentes de acordo com as regras configuradas pelo gateway.

Para comodidade de demonstração, supondo que haja tal demanda, ao inserir a seguinte URL no navegador, a solicitação será encaminhada para o Baidu.

http://localhost/?url=baidu
  • 1

Quando o seguinte URL for inserido no navegador, a solicitação será encaminhada para a Tencent.

http://localhost/?url=qq
  • 1

Como escrever um arquivo de configuração?

Repositório Spring Cloud GatewayDocumentação oficial, consulte seu formato.

Como precisamos realizar o encaminhamento correspondente com base nas condições de consulta na URL, encontramos o documento de configuração de asserção do Gateway sobre Consulta.

Insira a descrição da imagem aqui

Consulte este documento para configuração.

aplicação.yml

spring:
  cloud:
    gateway:
      routes:
        - id: baidu_test
          uri: https://www.baidu.com
          predicates:
            - Query=url,baidu
        - id: qq_test
          uri: https://www.qq.com
          predicates:
            - Query=url,qq
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Duas regras de roteamento são definidas aqui para usar parâmetros de consultaurlO valor determina o URI de destino para o qual a solicitação deve ser encaminhada.

  • spring.cloud.gateway.routes: Esta é a lista de configuração de roteamento do Spring Cloud Gateway.

  • cadaroutesO item define uma regra de roteamento.

  • id: cada regra de roteamento requer um ID exclusivo para identificar e gerenciar rotas.

  • uri : quando a regra de roteamento corresponder, a solicitação será encaminhada para este endereço URI.aquihttps://www.baidu.comehttps://www.qq.comOs URLs dos sites Baidu e Tencent são especificados respectivamente.

  • predicates : esta é a lista de asserções da regra de roteamento usada para determinar se esta regra de roteamento deve ser aplicada. Asserções são expressões avaliadas com base nos metadados da solicitação.

    • Query=url,baidu: Esta afirmação indica que se a solicitação contém umurlparâmetro de consulta e seu valor é igual abaidu, então esta regra de roteamento será acionada e a solicitação será encaminhada parahttps://www.baidu.com

    • Query=url,qq: Da mesma forma, se o parâmetro de consultaurlO valor éqq, a solicitação será encaminhada parahttps://www.qq.com

Dessa forma, quando sua aplicação receber uma mensagem comurl=baiduouurl=qqAo solicitar parâmetros de consulta, o Spring Cloud Gateway fará o proxy da solicitação para o site correspondente de acordo com as regras acima.

2. Verificação

Visite o seguinte endereço em seu navegador.

http://localhost/?url=baidu
  • 1

Insira a descrição da imagem aqui

Se você tiver a interface acima, significa que a configuração do serviço de gateway e a configuração de roteamento estão normais.

registro de erros

Um erro será relatado durante a inicialização do Gateway.

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2024-07-11 15:57:32.988 ERROR 27224 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Insira a descrição da imagem aqui

A razão é que o módulo Gateway depende do comum, e o módulo comum declara sua dependência do mybatis. O pacote mybatis procurará configurações relacionadas ao banco de dados na inicialização, e o projeto Gateway não requer um banco de dados, portanto não há configuração relevante. .

A solução é informar ao módulo gateway que não há necessidade de procurar configurações relacionadas ao banco de dados na inicialização e que você pode excluir dependências de pacotes relevantes declarando-as na anotação da classe de inicialização.

Insira a descrição da imagem aqui

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
  • 1