美文网首页Spring-Boot
SpringCloud初探(二) - 添加zuul网关服务

SpringCloud初探(二) - 添加zuul网关服务

作者: LssTechnology | 来源:发表于2019-05-10 19:51 被阅读6次
前言
  • Zuul 的官方介绍是 “Zuul is the front door for all requests from devices and web sites to the backend of the Netflix streaming application. As an edge service application, Zuul is built to enable dynamic routing, monitoring, resiliency and security. It also has the ability to route requests to multiple Amazon Auto Scaling Groups as appropriate.”
  • 大致是说zuul是设备和网站到Netflix后台应用程序的所有的请求的前门,是一个边缘化应用程序,它的创建是为了实现动态路由,监控,弹性,和安全性, 它还能够根据需要将请求路由到多个Amazon Auto Scaling组。
  • 其实zuul主要实现的功能就是API Gateway(api网关)的功能,为什么使用api gateway:
    1、客户端会多次请求不同的微服务,导致客户端复杂度增加,使用网关时客户端只与网关交互,降低客户端的调用逻辑的复杂度,同时网关也可以实现认证逻辑简化内部服务的之间相互调用的复杂度。
    2、对不同客户端的支持及数据的聚合,如一个网站有web端,手机端,页面所需的数据有同有异,可以将数据整合或者裁剪,减少客户端的请求次数,比如BFF架构。
    3、可以更好的对项目的微服务封装,可将项目的微服务统一封装在一个内网环境中,只通过网关提供服务,同时网关也可以对安全,认证,监控,防御单独强化。
一、项目搭建
1.1、项目目录如图:
1.png
1.2、 pom.xml配置:
<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>${nacos.version}</version>
        </dependency>
        <!--引入zuul做请求转发-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
            <version>2.0.1.RELEASE</version>
        </dependency>
    </dependencies>

注册服务为nacos,引入zuul网关依赖

1.3、 application.yml 配置
spring:
  application:
    name: test-gateway
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
server:
  port: 16000

#zuul转发规则配置
zuul:
  host:
    socket-timeout-millis: 60000
    connect-timeout-millis: 10000
  #关闭请求转发重试机制(全局关闭)
  retryable: false
  #添加默认前缀
  prefix: /api
  #不移除前缀
  strip-prefix: true
  #重新定义敏感请求头信息,放行全部的请求头部信息
  sensitive-headers:
  #解决重定向跳转路径问题
  add-host-header: true
  #配置路由git
  routes:
    client:
      path: /client-01/**
      serviceId: client-01
      strip-prefix: true

#ribbon的全局配置项
ribbon:
  #http请求连接建立超时时间(ms)
  ConnectTimeout: 10000
  #http请求处理超时时间(ms)
  ReadTimeout: 15000
  #默认重试次数
  MaxAutoRetries: 1
  #默认尝试的实例数
  MaxAutoRetriesNextServer: 4
  • 在启动类加上@EnableDiscoveryClient、@EnableZuulProxy注解
    关于zuul、ribbon、hystrix的配置,在其他地方会做说明
  • 这样当我们访问/api/client-01/** 的地址时,就会自动转到相应的服务中
二、搭建client-01服务
2.1、服务目录
2.png
2.2、pom.xml
<properties>
        <nacos.version>0.2.1.RELEASE</nacos.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>${nacos.version}</version>
        </dependency>
    </dependencies>
2.3、application.yml
server:
  port: 16001

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
  application:
    name: client-01
  • 在启动类加上@EnableDiscoveryClient注解
2.4、TestController.java
package com.lss.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
    @GetMapping("/test")
    public String test(){
        System.out.println("16001");
        return "16001";
    }
}
三、启动test-gateway 和 client-01 服务

参考 https://www.jianshu.com/p/717bd6117128 进入nacos服务中心,发现
test-gateway 和 client-01 服务都被注册成功

  • 调用TestController中的 /test接口
    curl http://localhost:16000/api/client-01/test
    结果如下图:
    1.png
  • 我们调取的是test-gateway 的端口,然后网关服务会根据api/client-01 自动转发到 client-01服务,并调取对应接口
以上只是网关的服务转发功能,希望对你有所帮助,如有不对,欢迎指正

相关文章

网友评论

    本文标题:SpringCloud初探(二) - 添加zuul网关服务

    本文链接:https://www.haomeiwen.com/subject/btbhoqtx.html