网关, 链路追踪
- Zuul;
- Sleuth;
- https://start/aliyun.com
- Zuul是Netflix开源的微服务网关,核心是一系列过滤器;
- zuul默认集成了ribbon和hystrix;
- 路由请求
- 权限认证
Zuul
- 新建项目,引入依赖:需要使用 eureka-client-获取注册信息
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.go.cn</groupId>
<artifactId>zuul-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>zuul-server</name>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
server:
port: 80
spring:
application:
name: zuul-server
eureka:
client:
service-url:
defaultZone: http://euk1.com:7000/eureka/
zuul 原理
- 隧道模式; 代理模式;
- 拒绝策略前置; 卫语句;
- 网关会将服务名转换成具体服务的ip和端口;
负载均衡设置
- 默认负载策略为轮询策略;
- 负载均衡配置文件调整:根据服务名调整:
provider:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 使用随机策略
配置指定服务的路由
- 相当于一个别名,之前使用的
/服务名/**
依旧可用来访问;
zuul:
routes:
consumer: /consumer-api/**
# 或者
# serviceId: consumer
# path: /consumer-api/**
重定向:
- 相当于给任意路径指定路由;相当于一个映射;
- 此配置的优先级低于服务名,也就是说指定的 url如果和服务同名会调用具体服务;不会走指定的url;
zuul:
routes:
xx:
path: /xx/**
url: http://www.baidu.com
search:
path: /search/**
url: http://www.baidu.com
忽略服务,禁止直接请求
- 直接从网关请求会报404,但是 consumer 还是可以调用;
zuul:
ignored-services: provider
前缀配置
- 前缀,当请求匹配前缀时会进行代理;
- 前缀配置会应用到所有路径;包括 注册的服务,也包括上面重定向中自定义的 url 路径;
zuul:
prefix: /api/v1
# 是否带上前缀请求,代理前缀默认会从请求路径中移除,通过该设置关闭移除功能,
# 默认为 true-不带前缀
# false-带前缀相当于被代理项目要有这个前缀
strip-prefix: false
暴露路由端点
-
添加依赖:默认已经集成了actuator
-
配置文件调整:暴露端点;
management:
endpoint:
health:
enabled: true
show-details: always
routes:
enabled: true
endpoints:
web:
exposure:
include: '*'
-
curl http://localhost/actuator/routes
: 可以查看路由的映射结果;例如上边 前缀配置的生效范围就可以使用此路径进行查看:
-
{
"/api/v1/consumer-api/**":"consumer",
"/api/v1/xx/**":"http://www.baidu.com",
"/api/v1/search/**":"http://www.baidu.com",
"/api/v1/provider/**":"provider",
"/api/v1/consumer/**":"consumer"
}