17.0、springcloud-Zuul-路由网关 以及 Zull整合Eureka

17.0、springcloud-Zuul-路由网关 以及 Zull整合Eureka

什么是Zuul?

        其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础。

        Zuul 和 Eureka 进行整合,将 Zuul 自身注册为 Eureka 服务治理下的应用,同时从 Eureka 中获取其他微服务的消息,即以后访问的微服务都是通过 Zuul 跳转后获得的

      【注意】:Zuul 服务最终还是会注册进 Eureka

        提供:注册 + 路由 + 过滤  三大功能!

Zuul能干嘛?

        ·路由

        ·过滤

那我们接下来看看如何实现路由网关

        第一步:创建一个 新maven项目 springcloud-zuul-9527 , 然后导入相关依赖,如下:

<!--zuul依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zuul</artifactId>
    <version>1.4.6.RELEASE</version>
</dependency>
<!--Hystrix依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix</artifactId>
    <version>1.4.6.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
    <version>1.4.6.RELEASE</version>
</dependency>
<dependency>
    <groupId>com.hkl</groupId>
    <artifactId>springcloud-api</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

        第二步:配置application.ymal文件:

server:
  port: 9527

#微服务注册的名字
spring:
  application:
    name: springcloud-zuul

#把zuul配置到Eureka中
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka/,http://localhost:7002/eureka/,http://localhost:7003/eureka/
  instance:
    instance-id: zuul9527.com
#    设置为true可以显示ip
    prefer-ip-address: true

        第三步:创建主启动类 ZuulApplication.java ,并添加@EnableZuulProxy注解 开启 zuul 功能

package com.hkl.springcloud;

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

@SpringBootApplication
@EnableZuulProxy
public class ZuulApplication_9527 {
    public static void main(String[] args) {
        SpringApplication.run(ZuulApplication_9527.class,args);
    }
}

        OK,配置完这些之后,依次开启:eureka注册中心、服务提供者、路由网关【这些环境搭建在之前的文章里有说】

        然后访问查看注册中心要确定两个服务都注册进来了

        然后去访问一下服务:http://localhost:8001/dept/get/1   

如下图所示:

没有加路由网关之前,访问完服务之后,会将服务的真实端口暴露出来,十分危险

        再来看看加了路由网关之后,如何访问:

        加了之后访问如下【注意这里访问的是 路由端口9527 而不是真正服务的端口】:

        http://localhost:9527/springcloud-provider-dept/dept/get/1

        可以看到加了路由网关之后,再次访问相同的服务,则不需要暴露真实的服务端口,而是去访问:路由端口 + 服务的名称 即可访问服务。这样不会将服务的真实端口暴露出来,大大提高了安全性。

        但是又发现了一个问题:虽然不会暴露服务端口了,但是却暴露了服务的名字,所以接下来我们来把服务的名字也给隐藏掉,并且让他无法通过服务的名字来访问

        第一步:在路由网关模块的application.yaml中加上:

 #路由网关的配置
zuul:
  routes:
    mydept.serviceId: springcloud-provider-dept #注意这里配置的是服务的名字,不能乱写,不然无法访问到对应的服务
    mydept.path: /mydept/**
  ignored-services: springcloud-provider-dept #不能再使用者路径访问了,ignored:会忽略掉了这个请求

【注意】mydept.serviceId这里配置的是服务的名字,不能乱写,不然无法访问到对应的服务

        第二步:接下来访问http://localhost:9527/mydept/dept/get/1

成功访问,如下所示:

        在application.yaml中配置了 mydept.path: /mydept/** 之后,就可以通过路由端口9527且不加上项目的名称,也能访问服务了。

        测试了一下用服务名字访问,由于配置了 ignored-services 的原因,已经无法访问了

        这样做的好处就是:在url请求中,用户看不到任何有关服务的有用信息了

        但是一般在真实的开发项目中我们会这样配置,如下:

 #路由网关的配置
zuul:
  routes:
    mydept.serviceId: springcloud-provider-dept#注意这里配置的是服务的名字,不能乱写,不然无法访问到对应的服务
    mydept.path: /mydept/**
  ignored-services: "*" #不能再使用者路径访问了,ignored:会忽略掉了这个请求
  prefix: /hkl #设置公共的前缀

ignored-services 这里会配置通配符 *

prefix: /hkl 真实开发中可能会有多个路由网关,所以会配置前缀

        加了前缀之后要访问服务就得在mydept前再加上hkl才可以成功访问

        访问:http://localhost:9527/hkl/mydept/dept/get/1

        如下所示,加上 /hkl 前缀 访问成功:

 

总结一下:

        第一步:导入eureka配置和相关路由配置

        第二步:application配置相关路由配置

        第三步:主启动类开启路由功能

所以说Zuul就是实现 路由 + 过滤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值