API网关
在微服务架构中,通常会有多个服务提供者。设想一个电商系统,可能会有商品、订单、支付、用户等多个类型的服务,而每个类型的服务数量也会随着整个系统体量的增大也会随之增长和变更。作为UI端,在展示页面时可能需要从多个微服务中聚合数据,而且服务的划分位置结构可能会有所改变。网关就可以对外暴露聚合API,屏蔽内部微服务的微小变动,保持整个系统的稳定性。
当然这只是网关众多功能中的一部分,它还可以做负载均衡,统一鉴权,协议转换,监控监测等一系列功能。
网关图片:
Zuul
Zuul是Spring Cloud的微服务API网关。
所有从设备或网站来的请求都会经过Zuul到达后端的Netflix应用程序。作为一个边界性质的应用程序,Zuul提供了动态路由、监控、弹性负载和安全功能。Zuul底层利用各种filter实现如下功能:
-
认证和安全 识别每个需要认证的资源,拒绝不符合要求的请求。
-
性能监测 在服务边界追踪并统计数据,提供精确的生产视图。
-
动态路由 根据需要将请求动态路由到后端集群。
-
压力测试 逐渐增加对集群的流量以了解其性能。
-
负载卸载 预先为每种类型的请求分配容量,当请求超过容量时自动丢弃。
-
静态资源处理 直接在边界返回某些响应。
zuul简单实列,实现路由跳转与过滤
1.创建zuul Module:springcloud-zuul-9527
2.导入依赖:zuul需要注册在eureka注册中心
<!--zuul-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<!--Eureka客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
3.配置配置文件:配置zuul来实现路由跳转与过滤
#配置端口
server:
port: 9527
#服务名称
spring:
application:
name: springcloud-zuul
#注册到eureka注册中心
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka/
instance:
instance-id: zuul9527.com
prefer-ip-address: true
#zuul配置
zuul:
routes:
mydept.serviceId: springcloud-provider-dept #需要隐藏的访问服务的服务名
mydept.path: /mydept/** #服务隐藏代替后的名字
ignored-services: springcloud-provider-dept #将真实访问的服务名忽略,不然直接访问真实的服务名照样实现。
prefix : /liuqing #设置公共请求
4.编写启动类,开启网关代理
@EnableZuulProxy :开启网关代理
@SpringBootApplication
@EnableZuulProxy
public class ZuulApplication_9527 {
public static void main(String[] args) {
SpringApplication.run(ZuulApplication_9527.class,args);
}
}
5.测试,启动注册中心,服务提供者,zuul网关。
之前访问地址:http://localhost:8001/dept/get/1
现在访问地址:http://localhost:9527/liuqing/mydept/get/1