Spring cloudSpring Cloud

spring cloud微服务架构(六):API 网关Zuul的

2018-08-03  本文已影响28人  mxjsxz

1 什么是网关

网关是一种可提供路由资源统一管理的工具, 将"1对N"问题 转换成了"1对1”问题。通过服务路由的功能,可以在对外提供服务时,只暴露 网关中配置的调用地址,而调用方就不需要了解后端具体的微服务主机。

有点Facade设计模式的感觉

image.png

服务网关是微服务架构中一个不可或缺的部分。通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制等功能。Spring Cloud Netflix中的Zuul就担任了这样的一个角色,为微服务架构提供了前门保护的作用。

Zuul通过与Eureka的整合,将自身注册到服务中心,从而可以获到所有其他微服务实例信息。

作用:

  1. 服务路由
  2. 过滤器
  3. 负载均衡
  4. 权限控制
  5. ...

2 本文结构

下面进行实验,使用到的组件包括:Eureka、Feign、Zuul,包括以下四个项目:

  1. spring-zuul-server:Eureka服务器
  2. spring-zuul-member : 服务提供者,提供查询会员的信息服务
  3. spring-zuul-sale : 服务调用者,调用会员信息
  4. spring-zuul-gateway : Zuul网关

关于前三个项目本文不再多少,前面的文章中已解释

3 Zuul的基本使用

创建一个spring boot项目,pom文件中加入Zuul依赖和httpclient依赖,因为Zuul的底层是通过httpclient实现的

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zuul</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.2</version>
        </dependency>
    </dependencies>

添加启动类,增加注解@EnableEurekaClient标识该项目也为Eureka服务,增加注解@EnableZuulProxy开启网关代理功能

@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class GatewayApp {

    public static void main(String[] args) {
        new SpringApplicationBuilder(GatewayApp.class).
        web(true).run(args);
    }

}

增加yml配置文件,先配置该项目使用端口,Eureka服务器地址,服务名称。然后配置Zuul路由信息,http://localhost:9000/sale/...的请求都会指向http://localhost:8081/...

server:
  port: 9000
spring:
  application:
    name: spring-zuul-gateway
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
zuul:
  routes:
    sale:
      path: /sale/**
      serviceId: spring-zuul-sale

4 Zuul路由断点查看

可以通过向网关项目中引入Spring boot Actuator来查看网关中代理的所有信息,具体做法:

  1. pom文件中引入spring-boot-starter-actuator依赖
  2. 配置文件中增加management.security.enabled = false,关闭安全认证
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <version>1.5.3.RELEASE</version>
</dependency>

management:
  security:
    enabled: false

然后访问:http://localhost:9000/routes,则会出现以下信息:

{
"/sale/**":"spring-zuul-sale",
"/spring-zuul-member/**":"spring-zuul-member",
"/spring-zuul-sale/**":"spring-zuul-sale"
}

参考:

  1. https://www.cnblogs.com/yjmyzz/p/spring-cloud-zuul-demo.html
  2. spring cloud入门指南
  3. https://github.com/Netflix/zuul
  4. http://www.ityouknow.com/springcloud/2018/01/20/spring-cloud-zuul.html
上一篇下一篇

猜你喜欢

热点阅读