Spring cloud

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

2018-10-25  本文已影响19人  Guoyubo

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转发器服务

上一篇下一篇

猜你喜欢

热点阅读