一个应用中可能包含PC、APP等等终端产品,如果使用单一服务入口的话,发生故障后,整个架构服务将不能提供服务。因此我们可以对不同的服务,配置不同的网关策略,正如nginx一样,可以负载均衡。

服务网关的要素:

稳定性,高可用;安全性;性能,并发性;扩展性;

一般api网关的实现方法有这么几种:

1、Nginx

2、zuul

3、Kong,专门提供微服务API管理平台(底层也是基于Nginx)

API网关的好处:

避免将内部信息暴露给外部;

统一入口;

为微服务添加额外的安全层;

支持混合通信协议;

降低构建微服务的复杂性;

微服务模拟与虚拟化;

缺点:

在架构上需要额外考虑更多编排和管理;

路由逻辑配置要进行统一的管理;

可能引发单点故障;

接下来,我们介绍下springboot整合zuul的过程,

Zuul的特点是:

路由+过滤器=zuul,它的核心是一系列的过滤器。有前置过滤器,可以限流、鉴权、参数校验、请求转发等等。

后置过滤器,可以统计业务、记录日志。生产环境中,我们要配置多台zuul,多个zuul节点注册到Eureka Server,实现高可用。

对应springcloud微服务来说,多个eureka server的zuul服务,可以在多台server互相注册,获取数据。

pom.xml引入依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
            <version>${spring.cloud.version}</version>
        </dependency>

Application.class

@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProxy
public class ZuulApplication {

    public static void main(String[] args) {
        SpringApplication.run(ZuulApplication.class, args);
    }

}

application.yml

 #记住每个属性和值之间,要在冒号后面加一个空格
#指定启用端口
server:
  port: 8766
  
eureka:
  instance:
    hostname: peer3
  client:
    registerWithEureka: false
    fetchRegistry: true
    serviceurl:
      defaultZone: http://peer1:8761/eureka/

spring:
  application:
    name: zuul
    
#zuul配置,这里配置了两条http和weath
zuul:
  routes:
    http:
      path: /htp/**
      serviceId: weather-api
    weath:
      path: /weath/**
      serviceId: weather

zuul还可以设置某些路径,不暴露给请求客户端,使用属性ignored-patterns排除某些路由,此外

加上zuul网关,默认服务器端是不会接受cookie的,所以我们也是添加属性sensitiveHeaders,设置为空就可以。

如果网关路由有更改,那么是不是要重启服务呢?这里我们可以结合springcloud config的自动更新,把配置存储到

springcloud config server,结合消息队列实现动态路由更新。

使用/weath/**访问

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐