目录
一、API网关作用:
二、网关主要功能:
2.1、统一服务入口
2.2、接口鉴权
2.3、智能路由
2.4、API接口进行统一管理
2.5、限流保护
三、 新建一个项目作为网关服务器
3.1、项目中引入Zuul网关依赖
3.2、在项目application.yml中配置网关路由信息
3.3、在项目启动类中加上注解@EnableZuulProxy开启网关代理
3.4、访问网关服务localhost:9031/api/goods/goodsInfo
3.5、使用网关时注意:
3.6、案例说明
一、API网关作用:
API网关为微服务架构中的服务提供了统一的访问入口,客户端通过API网关访问相关服务。API网关的定义类似于设计模式中的门面模式,它相当于整个微服务架构中的门面,所有客户端的访问都通过它来进行路由及过滤。它实现了请求路由、负载均衡、校验过滤、服务容错、服务聚合等功能。
二、网关主要功能:
2.1、统一服务入口
为所有的微服务提供一个唯一的入口,把客户端和服务端进行隔离,屏 蔽我们真实的服务信息,从而保护我们的服务。
2.2、接口鉴权
对所有的请求信息进行安全检测。如果检验不通过,直接拒绝访问。
2.3、智能路由
动态将请求转发到真实的服务器集群上。可通过负载均衡、反向代理、熔断 机制实现
2.4、API接口进行统一管理
日志收集、管理等。
2.5、限流保护
进行限流措施,从而对我们的服务进行保护。
三、 新建一个项目作为网关服务器
3.1、项目中引入Zuul网关依赖
<!-- 引入zuul网关-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
3.2、在项目application.yml中配置网关路由信息
server:
port: 9031
spring:
application:
name: server-zuul
eureka:
instance:
# 使用ip地址作为host,而不是机器号/电脑名称
prefer-ip-address: true
# Eureka客户端向注册中心发送心跳的时间间隔是1s,默认是30s
lease-renewal-interval-in-seconds: 1
# Eureka服务端在收到一次心跳后等待时间上限是2s,默认是90s
# 超时将剔出该微服务,也可以在Eureka服务端进行设置
lease-expiration-duration-in-seconds: 2
client:
service-url:
defaultZone: http://localhost:8090/eureka/,http://localhost:8060/eureka/
#zuul网关配置第一种方式
zuul:
routes:
api-goods: #路由规则名称,自己指定无特殊要求,可根据业务规则命名
path: /api/goods/** #配置请求转发路径,后续以/api/goods/**的请求将会转发到server-goods的服务中处理
#url与serviceId二选一,同时存在则会直接路由到指定的url而不会使用负载均衡
serviceId: server-goods #配置服务名,由负载均衡算法将请求分发到服务集群中处理(默认轮询)
# url: http://localhost:8041/ #指定url,由网关直接将请求转发到指定的服务器中处理(一般比较少用)
#zuul网关配置第二种方式
#zuul:
# routes:
# server-goods: #以服务名作为路由规则
# path: /api-goods/** #指定请求转发路径
#zuul网关配置第三种方式
#zuul:
# routes:
# #服务名: 转发路径
# server-goods: /api-goods/**
3.3、在项目启动类中加上注解@EnableZuulProxy开启网关代理
@SpringBootApplication
@EnableEurekaClient
//开启网关代理
@EnableZuulProxy
public class ZuulApp {
public static void main(String[] args) {
SpringApplication.run(ZuulApp.class,args);
}
}
3.4、访问网关服务localhost:9031/api/goods/goodsInfo
通过网关服务将请求转到到实际的服务中处理。
http://localhost:9031/api/goods为网关服务器接口,/api/goods会由zuul智能路由找到具体的服务server-goods(在application.yml中配置了路由规则),然后后面的/goodsInfo则是具体服务提供的api接口,根据路由规则负载均衡分发到服务集群的节点下调用真实的处理逻辑。
通过刷新网页,可以看到端口号在8041和8042之间来回切换(网关以负载均衡的轮询算法将请求转发到实际的服务器中处理)
3.5、使用网关时注意:
如果配置网关路由规则时使用的是通过服务名作为路由规则/或者以serviceID的形式配置服务名来匹配真实的服务器,则网关需要与对应转发的服务器注册到同一个注册中心集群下,即zuul网关需要搭配注册中心使用;如果配置网关路由规则时使用的是通过url来匹配真实的服务器,则可以不搭配使用注册中心
3.6、案例说明
server-goods(服务提供者---真实服务器处理逻辑):
分别在8041、8042两个端口开启了两台服务器
通过网关服务请求访问接口/goodsInfo
server-goods服务的controller处理逻辑
@RestController
@RequestMapping("/")
public class GoodsController {
@Value("${server.port}")
private String port;
@GetMapping("/goodsInfo")
public String goodsInfo(){
return "goodsInfo"+port;
}
}