购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.4 脱离Eureka使用Ribbon

在前文的示例中,是将Ribbon与Eureka配合使用的。但现实中可能不具备这样的条件,例如一些遗留的微服务,它们可能并没有注册到Eureka Server上,甚至根本不是使用Spring Cloud开发的,此时要想使用Ribbon实现负载均衡,要怎么办呢?

Ribbon支持脱离Eureka使用,此时,架构如图5-3所示。

img

图5-3 脱离Eureka使用Ribbon架构图

下面笔者通过一个简单的示例为大家讲解如何脱离Eureka使用Ribbon。

1.复制项目microservice-consumer-movie-ribbon,将ArtifactId修改为microservice-consumer-movie-without-eureka。

2.为了让测试更具说服力,干脆为项目去掉Eureka的依赖spring-cloud-starter-netflix-eureka-client,只使用Ribbon的依赖spring-cloud-starter-netflix-ribbon。在项目的pom.xml中,找到:

img

将其修改为:

img

3.去掉启动类上的@EnableDiscoveryClient注解(如果有的话)。

4.将application.yml改成如下:

img

其中,属性microservice-provider-user.ribbon.listOfServers用于为名为microservice-provider-user的Ribbon客户端设置请求的地址列表。

img

测试

1.启动两个或更多microservice-simple-provider-user实例。

img

2.启动microservice-consumer-movie-without-eureka。

3.多次访问 http://localhost:8010/log-user-instance ,控制台打印如下日志。

img
img

由结果可知,尽管电影微服务和用户微服务此时并没有注册到Eureka上,Ribbon仍可正常工作,请求依旧会分摊到两个用户微服务节点上。

img

当EurekaClient依赖在项目的classpath下时,如果想单独使用Ribbon,而不使用Eurkea的服务发现功能,需添加配置ribbon.eureka.enabled=false。

某些场景下,我们可能只想让指定名称的Ribbon Client去使用指定的URL请求,其他Ribbon Client依旧与Eureka配合使用,那么可配置如下:

img

这样,对于名为<clientName>的Ribbon Client,即可从地址列表localhost:8000,localhost:8001中选择地址去请求,而其他名称的Ribbon Client依旧可与Eureka配合使用——自动从Eureka Server获得目标服务的地址,并选择一个去请求。

参考文档: https://github.com/spring-cloud/spring-cloud-netflix/issues/1995 . /z+TbP+8wwJiCI2Ok2QQOTeLSLfNlFqL8CbzIdCcfZbUt+YNzOkJs+1OB8rvnvqw

点击中间区域
呼出菜单
上一章
目录
下一章
×