美文网首页Spring cloud
1-Zuul和Eureka简单实现http代理

1-Zuul和Eureka简单实现http代理

作者: Guoyubo | 来源:发表于2018-10-25 15:12 被阅读19次

    20181025
    Zuul:请求转发(可以转发到外部接口和本地接口)、负载均衡
    Eureka:服务的注册与发现
    参考了:
    https://www.cnblogs.com/hellxz/p/9282756.html
    https://www.cnblogs.com/duanxz/p/7527765.html
    主要参考了这两篇文章,文章中有些许错误,下面是我的总结。

    github地址:

    https://github.com/gyb123456/-zuul-eureka-demo
    代码里全是我的心血,是踩过很多坑才完成的,甚至在zuul的github上提问过

    前言

    Zuul可以做请求转发、负载均衡,这个好理解,那么Eureka的服务的注册与发现到底什么意思,光听名字,估计没人知道啥意思,一脸懵逼好嘛,所以说英文翻译过来是很坑爹的事情。我也是看了好多文章还不理解,最后直接看了代码案例才懂啥意思,怎么实现等等,别急,我会慢慢说的(迫不及待ing.jpg...)

    版本(最新版):

    springboot: 2.0.6
    springcloud: Finchley.SR2
    它好像支持的最低就是springboot 2.0.0了,springboot最好是2.0.3以上
    这个版本对应的zuul、eureka等包也改了,比如spring-cloud-starter-zuul变成了spring-cloud-starter-netflix-zuul,自己用idea新建项目时,勾选zuul的时候会自动帮你搞好的

    图片.png

    正文

    实现功能:

    里面包含三个基本的service,实现了基本的转发url的功能

    1 修改url后缀,将http://localhost:8080/test/aaa转发到了http://localhost:8090/test/aaa
    2 修改url前缀(ip+port),将http://localhost:8080/test/aaa转发到了http://localhost:1111/test/aaa
    需继承ZuulFilter重新run方法 ctx.setRouteHost(new URL("http://localhost:1111"));

    下面是原理图

    图片.png

    从图片可以看出要用Zuul+Eureka首先得开启三个服务:

    zuul服务:

    作为项目的入口服务器,配置拦截所需拦截的url,可以转发到不同的service,可以是本地的,也可以是其他ip.

    新建springboot项目时选择这个 图片.png

    如何配置?

    application.yml
    server:
      port: 8080
    zuul:
    #  为全局指定放行Cookie和Headers信息,也可以在每个路由里设置
      sensitiveHeaders: Cookie,Set-Cookie,Authorization
    
    #  ribbon配置
    #  ribbon:
    #    eager-load:
    #      enabled: true
    
    #      忽略转发的url
    #  ignored-patterns: /**/hello/**
      routes:
        my-test:
          path: /test/*
          url: http://localhost:8090
          stripPrefix: false
    #      利用eureka的注册发现
        my-eureka:
          path: /eureka/**
          service-id: my-eureka
          #设置转发时不忽略path的前缀.把path的所有内容当转发路由,很有用!!!
          stripPrefix: false
    #  配置eureka的服务器的地址
    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:1111/eureka/
    
    pom(详见github)
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
            </dependency>
            <!-- Eureka的依赖 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
    

    Eureka服务:

    我们的真正的业务逻辑service都需要在这个服务器上注册下地址,上面的Zuul才能够给据地址自动找到我们的真正的业务逻辑service并调用,所以说Eureka相当于中转的作用,配置好以后就可以访问http://localhost:1111/查看平台了,标红的就是我的zuul服务和普通的service服务连进来的

    图片.png
    application.properties
    server.port=1111
    #在默认设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为
    eureka.client.register-with-eureka=false 
    eureka.client.fetch-registry=false 
    eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka
    
    
    pom(详见github),注意这里是eureka服务端,所以肯定是eureka-server
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
    

    真正的业务逻辑service:

    这就是我们平时开发的普通项目,但是需要配置下,告诉Eureka服务器我这个服务的名字,以便别人调用
    ,怎么配置呢?

    application.properties
    server.port=8090
    #提供到注册中心的本服务的名字
    spring.application.name=my-eureka
    eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
    

    最后

    我也是第一次用springcloud的微服务框架 这三个项目是由启动顺序的(说明项目大做了呀)
    用的时候吧service-demo对应的filter里的Component注解注释去掉即可,把其他的filter注释掉,不然相互影响的
    1 先启动Eureka服务,不然其他服务先启动的话,会去注册中心找服务
    2 再启动service业务服务
    3 启动zuul转发器服务

    相关文章

      网友评论

        本文标题:1-Zuul和Eureka简单实现http代理

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