Используя ранее упомянутые микросервисные компоненты, уже можно построить простую микросервисную систему:
- Внедрение высокодоступного реестра сервисов через Spring Cloud Eureka
- Интерфейс вызывает балансировку нагрузки между сервисами через Spring Cloud Ribbon или Feign.
- Реализуйте изоляцию и объединение потоков через Spring Cloud Hystrix, чтобы предотвратить распространение ошибок.
Однако в микросервисной архитектуре серверные службы часто не открыты напрямую для вызовов внешних программ, поэтому для маршрутизации к соответствующей службе в соответствии с запрошенным URL-адресом требуется шлюз API. Шлюз API отвечает за реализацию таких функций, как маршрутизация запросов, балансировка нагрузки и фильтрация проверки между внешними приложениями и микросервисными системами.
В системе Spring Cloud компоненты Spring Cloud Zuul обеспечивают поддержку шлюза API.
Spring Cloud Zuul регистрирует себя как приложение под управлением службы Eureka, получает информацию об экземпляре службы от Eureka и поддерживает правила маршрутизации и экземпляры службы.
В то же время Zuul предоставляет набор механизмов фильтрации.Создавая фильтры для поддержки фильтрации проверки, микросервисные приложения могут быть более ориентированы на разработку бизнес-логики.
Практика шлюза
Прежде чем реализовать функцию службы шлюза, необходимо создать несколько микросервисных приложений для маршрутизации и фильтрации, а затем можно приступить к созданию шлюза.
1. Добавьте связанные зависимости
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
2. Включить функцию шлюза через аннотацию
package com.ulyssesss.apigateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@EnableZuulProxy
@SpringBootApplication
public class ApiGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ApiGatewayApplication.class, args);
}
}
3. Настройте правила маршрутизации
Zuul можно настроить на традиционную маршрутизацию,zuul.routes.<route>.path
настроить правила сопоставления,zuul.routes.<route>.url
Настройте адрес службы, где
Запустите приложение в соответствии с приведенной ниже конфигурацией и посетите http://localhost:5555/hello-service/hello. Оно будет переадресовано на http://localhost:8081/hello.
## 服务名称、端口号、服务注册中心地址
spring.application.name=api-gateway
server.port=5555
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
## 传统路由单实例配置
zuul.routes.hello-service.path=/hello-service/**
zuul.routes.hello-service.url=http://localhost:8081/
При настройке нескольких экземпляров службы с помощью традиционной маршрутизации необходимо отключить комбинацию балансировки нагрузки и Eureka и выполнить балансировку нагрузки, настроив список служб ленты.
## 传统路由多实例配置
zuul.routes.hello-service.path=/hello-service/**
zuul.routes.hello-service.service-id=hello-service
ribbon.eureka.enabled=false
hello-service.ribbon.listOfServers=http://localhost:8081/,http://localhost:8082/
Традиционный метод конфигурации требует много времени для поддержания взаимосвязи между путем и URL-адресом.После объединения с Eureka отношение сопоставления может поддерживаться автоматически с помощью механизма обнаружения службы.
## 面向服务的路由
zuul.routes.hello-service.path=/hello-service/**
zuul.routes.hello-service.service-id=hello-service
## 面向服务路由的简介配置
## zuul.routes.<serviceId>=<path>
zuul.routes.feign-consumer=/feign-consumer/**
Поскольку большинство правил конфигурации маршрутизации используют имя службы в качестве префикса для внешних запросов, Spring Cloud Zuul автоматически создает правило маршрутизации по умолчанию для каждой службы в Eureka, точно так же, как маршрутизация для вышеуказанных служб. Чтобы исключить правило по умолчанию для указанной службы, необходимо добавить следующую конфигурацию.
## 排除指定服务的默认规则
zuul.ignored-services=hello-service,feign-consumer
## 关闭所有服务的默认规则
#zuul.ignored-services=*
Все вышеперечисленное настраивается следующим образом:
spring.application.name=api-gateway
server.port=5555
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
## 传统路由单实例配置
#zuul.routes.hello-service.path=/hello-service/**
#zuul.routes.hello-service.url=http://localhost:8081/
## 传统路由多实例配置
#zuul.routes.hello-service.path=/hello-service/**
#zuul.routes.hello-service.service-id=hello-service
#ribbon.eureka.enabled=false
#hello-service.ribbon.listOfServers=http://localhost:8081/,http://localhost:8082/
## 面向服务的路由
## zuul.routes.<route>.path 指定请求路径
## zuul.routes.<route>.serviceId 指定服务名称
## <route> 为路由名称,可任意指定
#zuul.routes.hello-service.path=/hello-service/**
#zuul.routes.hello-service.service-id=hello-service
## 面向服务路由的简洁配置
## zuul.routes.<serviceId>=<path>
#zuul.routes.feign-consumer=/feign-consumer/**
## 外部请求前缀作为服务名为 zuul 默认规则,上方面向服务路由其实都可以省略
## 排除指定服务的默认规则
#zuul.ignored-services=hello-service,feign-consumer
## 关闭默认规则
#zuul.ignored-services=*
образец кодаДобро пожаловать в Звезду