Весенние облачные врата Зуула (1)

задняя часть Микросервисы Spring балансировки нагрузки

Используя ранее упомянутые микросервисные компоненты, уже можно построить простую микросервисную систему:

  • Внедрение высокодоступного реестра сервисов через 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=*

исходный адрес

образец кодаДобро пожаловать в Звезду