当前位置:首页>开发>正文

看Spring-cloud怎样使用Ribbon spring cloud 有哪些功能

2023-04-13 17:18:27 互联网 未知 开发

 看Spring-cloud怎样使用Ribbon spring cloud 有哪些功能

看Spring-cloud怎样使用Ribbon

关注下spring cloud是如何进行客户端负责均衡。 看怎么调用到负载均衡的,怎么定义负载均衡的,然后是怎么实现的?

第一个其实可以不用关心,调用的地方应该很多,找到一个地方来说明怎么调用的即可。 第二个,可以猜下,最主要的应该是一个类似
serviceInstance get(string serviceId)这样的方法吧。
第三个问题,明摆着,使用netflix的ribbon呗。

发起一个调用时,LB对输入的serviceId,选择一个服务实例。

org.springframework.cloud.netflix.ribbon.RibbonClientHttpRequestFactory.createRequest
throws IOException {
String serviceId = originalUri.getHost()
ServiceInstanceinstance = loadBalancer.choose(serviceId)
URIuri = loadBalancer.reconstructURI(instance, originalUri)
IClientConfigclientConfig = clientFactory.getClientConfig(instance.getServiceId())
RestClientclient = clientFactory.getClient(instance.getServiceId(), RestClient.class)
HttpRequest.Verbverb = HttpRequest.Verb.valueOf(httpMethod.name())
return new RibbonHttpRequest(uri, verb, client, clientConfig)
}

关键代码看到调用的是一个LoadBalancerClient的choose方法,对一个serviceId,选择一个服务实例。看下LoadBalancerClient是一个接口:

足够简单,只定义了三个方法,根据一个serviceId,由LB选择一个服务实例。reconstructURI使用Lb选择的
serviceinstance信息重新构造访问URI,能想来也就是用服务实例的host和port来加上服务的路径来构造一个真正的刘访问的真正服务
地址。

可以看到这个类定义在spring-cloud-commons.jar的package
org.springframework.cloud.client.loadbalancer下面,满篇不见ribbon字样。只有
loadbalancer,即这是spring-cloud定义的loadbalancer的行为,至于ribbon,只是客户端LB的一种实现。

Ribbon的实现定义在spring-cloud-netflix-core.jar中的
org.springframework.cloud.netflix.ribbon包下的RibbonLoadBalancerClient。看下
RibbonLoadBalancerClient中choose(String serviceId)方法的实现。

ServiceInstanceorg.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.choose(String serviceId)
@Override
public ServiceInstancechoose(String serviceId) {
Serverserver = getServer(serviceId)
return new RibbonServer(serviceId, server, isSecure(server, serviceId),
serverIntrospector(serviceId).getMetadata(server))
}

看到,最终调到的是ILoadBalancer的chooseServer方法。即netflix的LB的能力来获取一个服务实例。

protected ServergetServer(String serviceId) {
return getServer(getLoadBalancer(serviceId))
}
protected ServergetServer(ILoadBalancerloadBalancer) {
return loadBalancer.chooseServer(“default”) ofkey
}

至于netflix如何提供这个能力的在另外一篇博文中尝试解析下。

spring cloud 有哪些功能

用了二个多月,理解的就这些:
1. 注册中心(易分布,易扩充)
2. 网关(保护服务,权限统一验证)
3. 配置中心(配置统一管理)
4. 基于http的服务调用(调用简单)
5. 熔断器(容灾)
6. 监控
坑很多,一步一个坑。

spring cloud 中的zuul怎么保证自身高可用

zuul多个节点启动,自身也可以作为服务,注册到eureka上。
或者也可以一组节点配置为upstream,通过nginx的负载均衡分布。
后面一种方式需要自己开发监控插件,在节点出错的时候,自动修改nginx的配置并reload,通过这个方式把节点去掉。在节点恢复之后,通过同样的方式重新挂载上去。

如何调用spring cloud微服务

spring-cloud调用服务有两种方式,一种是百Ribbon RestTemplate, 另外一种是Feign。
Ribbon是一个基于度HTTP和TCP客户端的负载均衡器,其实版feign也使用了ribbon, 只要使用@FeignClient时,权ribbon就会自动使用。

如何学习spring cloud

第1天:查看spring boot官方文档,实现及实验spring boot 应用。 第2天:熟读spring cloud官方文档配置管理部分并熟悉配置管理相关概念。 第3天:熟悉Git概念,并上传配置文件到Git服务器,最后实现分布式配置管理。 第4天:熟读spring cloud官

如何学习spring cloud

第1天:查看spring boot官方文档,实现及实验spring boot 应用。 第2天:熟读spring cloud官方文档配置管理部分并熟悉配置管理相关概念。 第3天:熟悉Git概念,并上传配置文件到Git服务器,最后实现分布式配置管理。 第4天:熟读spring cloud官

最新文章