【SpringCloud】Zuul路由网关

1. 是什么

Zuul包含了对请求的路由和过滤两个最主要的功能:

  1. 路由功能: 负责将外部的请求转发到具体的微服务实例上,是实现外部访问统一入口的基础
  2. 过滤功能: 负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础

  Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,即以后的访问微服务都是通过Zuul跳转后获得

注:Zuul最终会作为一个单独的服务注册到Eureka


2. 作用

  代理 + 路由 +过滤 三大功能,如果这三大功能不太理解,可以结合nginx,我们都知道nginx实现了反向代理的功能,zuul同样也实现了反向代理的功能,这篇博客主要讲的是反向代理,它也有负载均衡(内置了Ribbon),权限控制的作用,只要配置serviceId一样即可


3. 项目实战

3.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>

3.2 配置文件

server: 
  port: 9527  # zuul服务的端口号
 
spring: 
  application:
    name: microservicecloud-zuul-gateway   # 注册到Eureka上的服务的名称
 
# eureka配置
eureka: 
  client: 
    service-url: 
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka  
  instance:
    instance-id: gateway-9527.com
    prefer-ip-address: true 
 
# zuul配置 
zuul: 
	#在服务前统一加前缀
  prefix: /dmsd
	# 将真实的服务名称忽略
  #ignored-services: microservicecloud-dept   # 要隐藏的服务名称
  ignored-services: "*"  ,* 代表忽略所有的,即不能通过真实服务名路径访问,只能用替换会后的名,遵守单一入口原则
  routes: 
    mydept.serviceId: microservicecloud-dept   # 被隐藏的服务名
    mydept.path: /mydept/**    # 将服务名替换为此名

3.3 启动项配置

@SpringBootApplication
@EnableZuulProxy
public class Zuul_9527_StartSpringCloudApp
{
	public static void main(String[] args)
	{
		SpringApplication.run(Zuul_9527_StartSpringCloudApp.class, args);
	}
}

到此zuul服务就搭建成功了,并修改本地hosts文件,将127.0.0.1 映射为 myzuul.com
以前我们访问一个服务输入的是:http://localhost:8080/dept/get/2
但是使用Zuul路由后输入的是:http://myzuul.com:9527/microservicecloud-dept/dept/get/2 ;
Zuul路由加前缀和隐藏真实服务名可输入: http://myzuul.com:9527/dbsd/mydept/dept/get/2


4. 总结思路

  搭建Zuul服务,并注册到Eureka,此时Zuul会获取注册到Eureka上的服务的信息,当我们输入地址(zuul+微服务名+url)后,首先通过Zuul找到要访问的服务,然后通过Zuul路由到要访问服务的地址上进行跳转

5.项目框架

  1. 使用nignx负载均衡和反向代理技术可以实现网关的高可用
  2. zuul网关自动集成ribbon客户端,实现路由的反向代理

6. zuul和feign的区别

两者的应用层次以及原理均不相同。

  1. zuul作为整个应用的流量入口,接收所有的请求,如app、网页等,并且将不同的请求转发至不同的处理微服务模块,其作用可视为nginx
  2. feign则是将当前微服务的部分服务接口暴露出来,并且主要用于各个微服务之间的服务调用
  3. zuul也含有hystrix和ribbon,基于http通讯的,可以直接代理服务就行。在它和服务间增加feign只会增加通讯消耗,没有特别的意义。feign在服务互相调用的时候用就行了,可以仿rpc通讯。
  4. Feign主要作服务端流控,Feign的负载均衡是基于Eureka实现的
  5. Zuul主要作客户端流控,并且Zuul的负载均衡结合Eureka实现易用性较好,并且Zuul我一般用在对第三方提供访问接口。

7.zuul和nginx的区别

相同点:

  1. 都实现负载均衡、反向代理、过滤请求、实现网关效果

不同点

  1. nginx采用c语言编写,zuul采用java语言编写
  2. nginx实现服务端负载均衡,而zuul采用ribbon+eureka实现客户端负载均衡

我们只所以选用zuul,是因为(采用自己熟悉语言开发,易学):

  1. zuul对所有服务会话可以进行拦截
  2. zuul可实现安全控制,统一异常处理,xxs
  3. 权限控制、黑名单和白名单、性能监控、日志打印
【课程介绍】     课程目标:             - 有状态登录和无状态登录的区别             - 常见的非对称加密算法和非对称的加密方式             - 老版本只使用jwt进行加密的弊端             - 授权中心的授权流程             - 如何整合网关组件实现jwt安全验证             - 理解什么是公钥什么是私钥      - 深刻理解授权流程什么是有状态? 有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。缺点是什么?- 服务端保存大量数据,增加服务端压力- 服务端保存用户状态,无法进行水平扩展- 客户端请求依赖服务端,多次请求必须访问同一台服务器。什么是无状态? 微服务集群中的每个服务,对外提供的都是Rest风格的接口。而Rest风格的一个最重要的规范就是:服务的无状态性,即:- 服务端不保存任何客户端请求者信息- 客户端的每次请求必须具备自描述信息,通过这些信息识别客户端身份带来的好处是什么呢?- 客户端请求不依赖服务端的信息,任何多次请求不需要必须访问到同一台服务- 服务端的集群和状态对客户端透明- 服务端可以任意的迁移和伸缩- 减小服务端存储压力
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值