统一接入的目的是简化客户端调用复杂度。在微服务架构模式下后端服务的实例数一般是动态的,对于客户端而言很难发现动态改变的服务实例的访问地址信息。因此在基于微服务的项目中为了简化前端的调用逻辑,通常会引入APIGateway作为轻量级网关.
不同的客户端对显示时数据的需求是不一致的,比如手机端或者Web端,低延迟的网络环境或者高延迟的网络环境。为了优化客户端的使用体验,APIGateway可以对通用性的响应数据进行裁剪以适应不同客户端的使用需求。同时还可以将多个API调用逻辑进行聚合,从而减少客户端的请求数,优化客户端用户体验。
对于系统系统而言进行微服务改造通常是由于原有的系统存在或多或少的问题,比如技术债务,代码质量,可维护性,可扩展性等等。APIGateway的模式同样适用于这一类遗留系统的改造,通过微服务化的改造逐步实现对原有系统中的问题的修复,从而提升对于原有业务响应力的提升。通过引入抽象层,逐步使用新的实现替换旧的实现。
1、创建网关模块Artifact:api_gateway2、pom.xml依赖
@EnableZuulProxy注解中包含了断路器注解@EnableCircuitBreaker
packagecom.atguigu.guliedu.gateway;@SpringBootApplication@EnableZuulProxypublicclassApiGatewayApplication{publicstaticvoidmain(String[]args){SpringApplication.run(APIGatewayApplication.class,args);}}5、启动Zuul网关6、通过网关访问微服务
例如:访问课程中心微服务
通过url映射的方式来实现zull的转发有局限性,比如,每增加一个服务就需要配置一条内容,另外后端的服务如果是动态来提供(例如服务集群),就不能采用这种方案来配置了。
在实现微服务架构时,服务名与服务实例地址的关系在eurekaserver中已经存在了,所以只需要将Zuul注册到eurekaserver上去发现其他服务,就可以实现对serviceId的映射。
服务化也就是将网关交给注册中心Eureka,可以被其他微服务发现并调用。
1、添加依赖添加对Eureka的支持
依次启动Eureka、edu和网关5、通过网关访问微服务
例如:访问用户中心微服务
Zuul会代理所有注册到EurekaServer的微服务,并且Zuul的路由规则如下:
依次启动Eureka、ucenter、statistics和网关以下两个路径均可访问
目的是不想让某个或某些服务对外暴露接口例如:统计分析微服务只提供给内网业务系统访问,不提供外网的网站和应用用户访问
禁止guliedu-statistics对外提供接口zuul.ignored-services=guliedu-statistics3、访问测试
zuul.ignored-patterns=/**/admin/**3、访问测试网关不能访问所有包含//admin/的路由
1、配置映射规则可以通过我们定义的映射路径进行访问
结论:经过网关访问的请求,传输过程中cookie被过滤掉了
解决方案:1、使用token2、在配置文件中将请求头的过滤清除掉,使cookie可以向下游传递#还原被网关过滤的请求头