本文章首发自本人公众号: 壹枝花算不算浪漫 ,如若转载请标明来源!
感兴趣的小伙伴可关注个人公众号:壹枝花算不算浪漫
前面已经分析了Hystrix相关的源码,这一讲开始看下微服务网关的鼻祖:zuul组件。
在大多数微服务实现中,内部微服务端点不会暴露在外部。
一组公共服务将使用API网关向客户端公开。 Spring Cloud Zuul 主要的功能是提供负载均衡、反向代理、权限认证、动态路由、监控、弹性、安全等的边缘服务。其主要作用是为微服务架构提供了前门保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。
通常我们用api网关作用如下:
1、请求路由 屏蔽复杂的后台系统的大量的服务,然后让前端工程师调用的时候非常的简单
2、统一处理 把所有后台服务都需要做的一些通用的事情,挪到网关里面去处理 (1)统一安全认证 (2)统一限流 (3)统一降级 (4)统一异常处理 (5)统一请求统计 (6)统一超时处理
来张图可能会更直观一点:
还是基于之前的代码,代码git地址: github.com/barrywangme…
项目结构:
添加zuul-gateway配置如下:
server: port: 9000 spring: application: name: zuul-gateway eureka: instance: hostname: localhost client: serviceUrl: defaultZone: http://localhost:8761/eureka/ zuul: prefix: /api routes: serviceB: serviceId: serviceB 复制代码
然后一次启动eureka-server、serviceA、serviceB、zuul-gateway
浏览器请求: http://localhost:9000/api/serviceB/user/feign/greeting/wangmeng
可看到浏览器返回对应结果。 这里9000是 zuul-gateway
的项目端口号,这里我们请求被转发到 serviceB
服务上,然后给出响应。
这一讲很简单,后面我们可以通过demo代码进行debug 一点点去探究源码。