моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Основное содержание этого раздела — создание модуля шлюза, регистрация шлюза в Nacos и настройка маршрутизации для тестирования.
Щелкните правой кнопкой мыши по проектуNew->Module
, создайте новый модуль, имя модуля gulimall-gateway
。
Заполните различную информацию.
Выберите зависимость шлюза.
Нажмите «Создать», чтобы создать модуль.
<dependency>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
Поскольку службе шлюза также необходимо использовать центр регистрации и центр конфигурации, ей требуются соответствующие зависимости пакетов, которые получаются с использованием общего модуля.
Добавив аннотации к классу запуска, сервис можно зарегистрировать в центре регистрации после запуска.
@EnableDiscoveryClient
Создайте три новых файла конфигурации в каталоге ресурсов.
① свойства приложения
Настройте информацию, связанную с центром регистрации Nacos.
server.port=80
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.application.name=gulimall-gateway
② 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
③ приложение.yml
В этом файле запишите конфигурацию маршрутизации шлюза. Подробности см. в следующем разделе.
В этой части мы рассмотрим два реальных требования в качестве примеров, чтобы попрактиковаться в настройке шлюза.
Роль шлюза — пересылать полученные запросы соответствующим сервисам согласно правилам, настроенным шлюзом.
Для удобства демонстрации, при условии наличия такого требования, при вводе следующего URL-адреса в браузере запрос будет перенаправлен в Baidu.
http://localhost/?url=baidu
Когда в браузере будет введен следующий URL-адрес, запрос будет перенаправлен в Tencent.
http://localhost/?url=qq
Как написать файл конфигурации?
Репозиторий 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
Здесь определены два правила маршрутизации для использования параметров запроса.url
Значение определяет целевой URI, на который должен быть перенаправлен запрос.
spring.cloud.gateway.routes
: это список конфигурации маршрутизации Spring Cloud Gateway.
каждыйroutes
Элемент определяет правило маршрутизации.
id
: каждому правилу маршрутизации требуется уникальный идентификатор для идентификации маршрутов и управления ими.
uri
: если правило маршрутизации совпадает, запрос будет перенаправлен на этот URI-адрес.здесьhttps://www.baidu.com
иhttps://www.qq.com
URL-адреса веб-сайтов 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 будет проксировать запрос на соответствующий веб-сайт в соответствии с вышеуказанными правилами.
Посетите следующий адрес в своем браузере.
http://localhost/?url=baidu
Если у вас указанный выше интерфейс, это означает, что конфигурация службы шлюза и конфигурация маршрутизации в норме.
Во время запуска шлюза будет сообщено об ошибке.
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
Причина в том, что модуль Gateway зависит от common, а общий модуль заявляет о своей зависимости от mybatis. Пакет mybatis при запуске будет искать конфигурации, связанные с базой данных, а проект Gateway не требует базы данных, поэтому соответствующей конфигурации нет. .
Решение состоит в том, чтобы сообщить модулю шлюза, что нет необходимости искать конфигурации, связанные с базой данных, при запуске и что вы можете исключить соответствующие зависимости пакета, объявив аннотацию класса запуска.
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)