1.网关的作用
是一个网络整体系统中的前置门户入口。请求首先通过网关,进行路径的路由,定位到具体的服务节点上。
网关有以下几个作用:
- 统一入口:未全部为服务提供一个唯一的入口,网关起到外部和内部隔离的作用,保障了后台服务的安全性。
- 鉴权校验:识别每个请求的权限,拒绝不符合要求的请求。
- 动态路由:动态的将请求路由到不同的后端集群中。
- 减少客户端与服务端的耦合:服务可以独立发展,通过网关层来做映射。
2.zuul不是必选的,是推荐使用
一般在微服务数量较多(多于10个)的时候推荐使用,对服务的管理有严格要求的时候推荐使用,当微服务权限要求严格的时候推荐使用。
3.配置
(1)网关访问方式
①通过zuul访问服务,URL 地址默认格式为:http://zuulHostIp:port/要访问的服务名称/服务中的URL
服务名称:各服务中,application 中的name
服务的URL:就是对应的服务对外提供的URL路径监听。
(2)依赖注入(springboot启动继承父类-------版本信息配置------eureka-client 依赖/zuul网关依赖---管理依赖添加------构建)
① springboot继承父类
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
②版本信息配置(方便修改版本)
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.SR1</spring-cloud.version> </properties>
③所需依赖(以下两个必须,可根据自己需要自添)
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency>
④管理依赖(不添加管理,上边依赖不加版本会报错)
<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>
4.创建application启动类
/** * @EnableZuulProxy 开启网关 * */ @SpringBootApplication @EnableZuulProxy public class ZuulApplication { public static void main(String[] args) { SpringApplication.run(ZuulApplication.class,args); } }
5.配置yml
server:
port: 8012
spring:
application:
name: zuul
zuul:
routes:
EUREKA-CLIENT-ZUUL:
path: /EUREKA-CLIENT-ZUUL/**
serviceId: EUREKA-CLIENT-ZUUL
eureka:
client:
service-url:
defaultZone: http://localhost:8011/eureka/
6.总结
网关配置方式有多种,默认、URL、服务名称、排除|忽略、前缀。
网关配置没有优劣好坏,应该在不同的情况下选择合适的配置方案。
zuul网关其底层使用ribbon来实现请求的路由,并内置Hystrix,可选择性提供网关fallback逻辑。使用zuul的时候,并不推荐使用Feign作为application client端的开发实现。毕竟Feign技术是对ribbon的再封装,使用Feign本身会提高通讯消耗,降低通讯效率,只在服务相互调用的时候使用Feign来简化代码开发就够了。而且商业开发中,使用Ribbon+RestTemplate来开发的比例更高。
参考文章:https://blog.csdn.net/zhangningkid/article/details/99433228