一、接上一篇项目进行修改,修改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
重启之后跟以上效果一样。