Spring Cloud Zuul服务网关

在了解微服务网关Spring Cloud Zuul之前,我们先要了解为什么我们要使用微服务网关:

不同的微服务一般会有不同的网络地址,而客户端可能需要调用多个服务接口才能完成一个业务需求.
若让客户端直接与各个微服务通信,会有以下问题:

  • 客户端会多次请求不同微服务,增加了客户端复杂性
  • 存在跨域请求,处理相对复杂
  • 认证复杂,每个服务都需要独立认证
  • 难以重构,多个服务可能将会合并成一个或拆分成多个

为了解决上面这些问题,我们需要将权限控制、日志收集这样的东西从我们的服务单元中抽离出去,而最适合这些逻辑的地方就是处于对外访问最前端的地方,我们需要一个更强大一些的均衡负载器服务网关。
此时我们引入了zuul网关
Zuul 是开源的微服务网关,可与 Eureka、Ribbon、Hystrix 等组件配合使用,Zuul 它的核心是一系列过滤器,这些过滤器可完成下面功能:

身份认证与安全:识别每个资源的验证要求,并拒绝那些要求不符合的请求
审核与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生产视图
动态路由:动态的将请求路由到不同的后端集群

压力测试:逐渐增加指向集群的流量,以了解性能

负载分配:为每一种负载类型分配对应容量,并弃用超出限定值的请求
静态响应处理:在边缘位置直接建立部分响应,从而避免转发到内部集群
多区域弹性:跨越 AWS Region 进行请求路由,实现 ELB
使用多样化,让系统边缘更贴近使用者

在这里插入图片描述
接下来我们将进行zuul的快速入门:

1.创建一个工程,导入相应依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.zpc.microservice</groupId>
    <artifactId>microservice-api-gateway</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
    </parent>

    <dependencyManagement>
        <dependencies>
            <!-- 导入Spring Cloud的依赖管理 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
<!--整合zuul网关-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>
     </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

2.编写启动类ServiceZuulApplication

package com.zyc.zuul;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@EnableZuulProxy//启动zuul
@SpringBootApplication
@EnableEurekaClient
public class ServiceZuulApplication {

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

}

3.编写application.yml文件

server:
  port: 9999
spring:
  application:
    name: service-zuul
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8888/eureka/
      ###因为该应用为服务提供者,是eureka的一个客户端,需要注册到注册中心
      register-with-eureka: true
      ###是否需要从eureka上检索服务
      fetch-registry: true
  instance:
    prefer-ip-address: true #将自己的ip地址注册到Eureka服务中
    ip-address: 127.0.0.1
    instance-id: ${spring.application.name}:${server.port}
    ###${server.port} #指定实例id
zuul:
  routes: #定义服务转发规则
    service-product: #item-service这个名字是任意写的
      path: /service-product/** #匹配service-product的请求product服务
      #url: http://127.0.0.1:8081 #真正的微服务地址
    service-order: #名字尽量和业务系统相关
      path: /service-order/** #匹配service-order的请求order服务




其中:

zuul: routes: #定义服务转发规则
service-product: #item-service这个名字是任意写的
path: /service-product/** #匹配service-product的请求product服务
#url: http://127.0.0.1:8081 #真正的微服务地址
service-order: #名字尽量和业务系统相关
path: /service-order/** #匹配service-order的请求order服务

为相应的路由规则

4.启动测试
启动Eureka注册中心、Item服务、order服务、网管服务4个工程。
在这里插入图片描述
接下来测试,功能是否正常:

service-order
在这里插入图片描述
service-product:在这里插入图片描述

总结:微服务网关的解决方案

1. Nginx+Lua
2. spring cloud zuul(本次案例)
3. spring cloud Gateway

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值