기술나눔

그레인 몰 실용 노트-27-분산 구성 요소-SpringCloud-게이트웨이-생성

2024-07-12

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

이 섹션의 주요 내용은 게이트웨이 모듈을 생성하고, Nacos에 게이트웨이를 등록하고, 테스트를 위한 라우팅을 구성하는 것입니다.

1. 게이트웨이 모듈 생성

프로젝트를 마우스 오른쪽 버튼으로 클릭하세요.New->Module, 새 모듈 생성, 모듈 이름 gulimall-gateway

여기에 이미지 설명을 삽입하세요.

다양한 정보를 입력하세요.

여기에 이미지 설명을 삽입하세요.

게이트웨이 종속성을 선택합니다.

여기에 이미지 설명을 삽입하세요.
생성을 클릭하여 모듈을 생성합니다.

2. 게이트웨이 서비스 구성

1. 공통 모듈에 따라 다름

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

게이트웨이 서비스는 등록 센터와 구성 센터도 사용해야 하기 때문에 공통 모듈을 사용하여 얻은 관련 패키지 종속성이 필요합니다.

2. 서비스 검색 시작

시작 클래스에 주석을 추가하면 서비스 시작 후 등록 센터에 서비스를 등록할 수 있습니다.

@EnableDiscoveryClient
  • 1

3. 구성 파일 생성

리소스 디렉터리에 세 개의 새 구성 파일을 만듭니다.

① 애플리케이션.속성

Nacos 등록 센터 관련 정보를 구성합니다.

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

② 부트스트랩 속성

Nacos 구성 센터의 관련 정보를 구성하십시오. Nacos에는 게이트웨이라는 네임스페이스가 미리 생성되어 있어야 합니다. 게이트웨이 모듈의 모든 구성 파일은 이 네임스페이스에 저장됩니다.

여기에 이미지 설명을 삽입하세요.

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

③ application.yml

이 파일에 게이트웨이 라우팅 구성을 작성합니다. 자세한 내용은 다음 섹션을 참조하세요.

3. 게이트웨이 라우팅 구성

1. 라우팅 구성

이 부분에서는 게이트웨이 구성 방법을 연습하기 위해 두 가지 실제 요구 사항을 예로 들어 보겠습니다.

게이트웨이의 역할은 게이트웨이가 구성한 규칙에 따라 수신된 요청을 해당 서비스로 전달하는 것입니다.

시연의 편의를 위해 이러한 수요가 있다고 가정하고 브라우저에 다음 URL을 입력하면 해당 요청이 Baidu로 전달됩니다.

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

브라우저에 다음 URL을 입력하면 요청이 Tencent로 전달됩니다.

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

구성 파일을 작성하는 방법은 무엇입니까?

리포지토리 Spring Cloud 게이트웨이공식 문서, 해당 형식을 참조하세요.

URL에 대한 쿼리 조건을 기반으로 해당 전달을 수행해야 하므로 Query에 대한 Gateway의 Assertion 구성 문서를 찾습니다.

여기에 이미지 설명을 삽입하세요.

구성에 대해서는 이 문서를 참조하세요.

응용 프로그램.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

쿼리 매개변수를 사용하기 위해 여기에 두 가지 라우팅 규칙이 정의되어 있습니다.url값은 요청이 전달되어야 하는 대상 URI를 결정합니다.

  • spring.cloud.gateway.routes: Spring Cloud Gateway의 라우팅 구성 목록입니다.

  • routes항목은 회람 규칙을 정의합니다.

  • id: 각 라우팅 규칙에는 경로를 식별하고 관리하기 위한 고유 ID가 필요합니다.

  • uri : 라우팅 규칙이 일치하면 요청이 이 URI 주소로 전달됩니다.여기https://www.baidu.com그리고https://www.qq.comBaidu 및 Tencent 웹사이트의 URL이 각각 지정됩니다.

  • predicates : 이 라우팅 규칙을 적용해야 하는지 여부를 결정하는 데 사용되는 라우팅 규칙의 어설션 목록입니다. 어설션은 요청의 메타데이터를 기반으로 평가되는 표현식입니다.

    • Query=url,baidu: 이 주장은 요청에 다음이 포함되어 있음을 나타냅니다.url쿼리 매개변수이며 해당 값은 다음과 같습니다.baidu, 이 라우팅 규칙이 트리거되고 요청이 다음으로 전달됩니다.https://www.baidu.com

    • Query=url,qq: 마찬가지로 쿼리 매개변수가url값은qq, 요청이 다음으로 전달됩니다.https://www.qq.com

이렇게 하면 애플리케이션이 다음과 같은 메시지를 받을 때url=baidu또는url=qq쿼리 매개변수를 요청할 때 Spring Cloud Gateway는 위 규칙에 따라 해당 웹사이트로 요청을 프록시 처리합니다.

2. 검증

브라우저에서 다음 주소를 방문하세요.

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

여기에 이미지 설명을 삽입하세요.

위의 인터페이스가 있다면 게이트웨이 서비스 구성과 라우팅 구성이 정상이라는 뜻입니다.

오류 기록

게이트웨이를 시작하는 동안 오류가 보고됩니다.

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

여기에 이미지 설명을 삽입하세요.

그 이유는 게이트웨이 모듈은 common에 의존하고, common 모듈은 mybatis에 대한 의존성을 선언하기 때문입니다. mybatis 패키지는 시작 시 데이터베이스 관련 구성을 찾을 것이며, Gateway 프로젝트에는 데이터베이스가 필요하지 않으므로 관련 구성이 없습니다. .

해결책은 시작 시 데이터베이스 관련 구성을 검색할 필요가 없으며 시작 클래스 주석에서 선언하여 관련 패키지 종속성을 제외할 수 있음을 게이트웨이 모듈에 알리는 것입니다.

여기에 이미지 설명을 삽입하세요.

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
  • 1