Обмен технологиями

Практические заметки Grain Mall-27-Распределенные компоненты-SpringCloud-Gateway-Creation

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

② bootstrap.свойства

Настройте соответствующую информацию в центре конфигурации 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

③ приложение.yml

В этом файле запишите конфигурацию маршрутизации шлюза. Подробности см. в следующем разделе.

3. Конфигурация маршрутизации шлюза

1. Конфигурация маршрутизации

В этой части мы рассмотрим два реальных требования в качестве примеров, чтобы попрактиковаться в настройке шлюза.

Роль шлюза — пересылать полученные запросы соответствующим сервисам согласно правилам, настроенным шлюзом.

Для удобства демонстрации, при условии наличия такого требования, при вводе следующего URL-адреса в браузере запрос будет перенаправлен в Baidu.

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

Когда в браузере будет введен следующий URL-адрес, запрос будет перенаправлен в Tencent.

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

Как написать файл конфигурации?

Репозиторий Spring Cloud GatewayОфициальная документация, обратитесь к его формату.

Поскольку нам необходимо выполнить соответствующую пересылку на основе условий запроса по URL-адресу, мы находим документ конфигурации утверждений Gateway о запросе.

Вставьте сюда описание изображения

Обратитесь к этому документу для настройки.

приложение.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: каждому правилу маршрутизации требуется уникальный идентификатор для идентификации маршрутов и управления ими.

  • uri : если правило маршрутизации совпадает, запрос будет перенаправлен на этот URI-адрес.здесьhttps://www.baidu.comиhttps://www.qq.comURL-адреса веб-сайтов Baidu и Tencent указаны соответственно.

  • 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

Вставьте сюда описание изображения

Причина в том, что модуль Gateway зависит от common, а общий модуль заявляет о своей зависимости от mybatis. Пакет mybatis при запуске будет искать конфигурации, связанные с базой данных, а проект Gateway не требует базы данных, поэтому соответствующей конфигурации нет. .

Решение состоит в том, чтобы сообщить модулю шлюза, что нет необходимости искать конфигурации, связанные с базой данных, при запуске и что вы можете исключить соответствующие зависимости пакета, объявив аннотацию класса запуска.

Вставьте сюда описание изображения

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
  • 1