《深入理解Spring Cloud与微服务构建》学习笔记(十七)~路由网关Spring Cloud Zuul~负载均衡

一、接上一篇项目进行修改,修改zuul-eureka-client启动类,添加端口获取,并在hi方法打印,如:

@Value("${server.port}")
    String port = "";

    @GetMapping("/hi")
    public String hi(){
        return "hello ! im zuul-eureka-client! 端口:"+port ;
    }

新建两个yaml配置文件,端口8001、8002,由此增加两个不同启动实例。
二、新建moudle:zuul_eureka_ribbon,并做如下配置(参照第十一篇:https://blog.csdn.net/ssdate/article/details/88364315):

server:
  port: 8003
spring:
  application:
    name: zuul-eureka-ribbon
eureka:
  client:
    service-url:
      defaultZone: http://zuul-server:8000/eureka

依次启动:zuul-server、zuul-eureka-client的两个实例、zuul-eureka-ribbon。

浏览器访问:http://localhost:8001/hi    http://localhost:8002/hi  客户端的两个实例分别打印两个实例的端口信息:

继续访问zuul-eureka-ribbon 的hello接口,如:http://localhost:8003/hello  多次刷新访问会看到在zuul-eureka-client的两个实例上切换:

此时是巩固前面的内容。现在对zuul进行扩展。
这里存在个问题,对于实例名字的访问,如果访问不到,就需要查看一下在hosts文件里是否进行了配置:

三、修改zuul-cloud-client的配置文件,添加zuul-eureka-ribbon的分发,如:

重启zuul-cloud-client,浏览器访问:http://localhost:9000/ribbonapi/hello   ,刷新页面可以看到在zuul-eureka-client两个实例之间切换访问,浏览器交替显示一下内容:
hello ! im zuul-eureka-client! 端口:8001
hello ! im zuul-eureka-client! 端口:8002

四、由此可见zuul在路由转发上做了负载均衡,如果不需要ribbon做负载均衡,可以指定服务实例的url,这时用zuul.routes.hiapi. url配置指定,就不需要zuul.foutes.hiapi.serviceId了,一旦指定了url,zuul就不能做负载均衡了,而是直接访问url,在实际开发中这种做法是不可取的。

      如果想指定url,并且想做负载均衡,那么就需要自己维护负载均衡的服务列表了。首先将ribbon.eureka.enable改为false,及Ribbon客户端不向eureka客户端获取服务注册信息。需要自己维护一份注册列表,通过**.ribbon.listOfServes配置多个负载均衡的url,如:

server:
  port: 9000

spring:
  application:
    name: zuul-cloud-client

eureka:
  instance:
    hostname: zuul-cloud-client
  client:
    service-url:
      defaultZone: http://zuul-server:8000/eureka
ribbon: 
  eureka:
    enabled: false
zuul:
  routes:
    hiapi:
      path: /hiapi/**
#      serviceId: zuul-eureka-client
      serviceId: hiapi-v1
    ribbonapi:
      path: /ribbonapi/**
      serviceId: zuul-eureka-ribbon
hiapi-v1:
  ribbon:
    listOfServers: http://localhost:8001,http://localhost:8002

主要修改的地方:

重启zuul-clioud-client,由于是自己维护注册列表,直接访问的zuul-eureka-client,并没有通过zuul-eureka-ribbon,
所以这里在浏览器直接访问:http://localhost:9000/hiapi/hi 
可以看到多次访问会交替出现以下内容:
hello ! im zuul-eureka-client! 端口:8001
hello ! im zuul-eureka-client! 端口:8002

五、如果想给每个服务api接口添加前缀,作为版本号标识,这时就需要用到zuul.prefix的配置,如:

这时的地址就变成:http://localhost:9000/v1/hiapi/hi            
重启之后跟以上效果一样。

实例代码:https://download.csdn.net/download/ssdate/11015294

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值