Spring Cloud 冷知识

1、Ribbon和Nginx的区别

Ribbon:

属于客户端的负载均衡。Ribbon是从注册中心服务器端上获取服务注册信息列表,缓存到本地,然后在本地实现轮训负载均衡策略。既在客户端实现负载均衡。

Nginx:

属于服务器端的负载均衡。nginx是客户端所有请求统一交给nginx,由nginx进行实现负载均衡请求转发,属于服务器端负载均衡。既请求有nginx服务器端进行转发。

2、Ribbon到底该怎么用 【新手】

其实Ribbon你一直在使用,只是你使用的时候你不知道你在使用而已。

@Bean
//客户端的负载均衡注解
@LoadBalanced		
public RestTemplate getRestTemplate() {
	return new RestTemplate();
}

@GetMapping("/router")
@ResponseBody
public String router() {
	RestTemplate tpl = getRestTemplate();
	String json = tpl.getForObject(routerUrl, String.class);
	return json;
}

看到这代码,熟悉了吧。使用了 @LoadBalanced 其实就意味着你使用了Ribbon。

3、@EnableDiscoveryClient和@EnableEurekaClient 

有时你会发现@EnableDiscoveryClient标签无法注册到注册中心,百度查询之后@EnableDiscoveryClient,得到的结论是@EnableDiscoveryClient和@EnableEurekaClient一样,能够让注册中心能够发现,扫描到改服务

不同点:

@EnableEurekaClient只适用于Eureka作为注册中心

@EnableDiscoveryClient 可以是Eureka或其他(consul、zookeeper等)注册中心

我们使用时,只需要使用一个即可哦。

4、Hystrix Ribbon 需要单独一个项目吗【新手】

Hystrix被设计的目标是:

一、对通过第三方客户端库访问的依赖项(通常是通过网络)的延迟和故障进行保护和控制。
二、在复杂的分布式系统中阻止级联故障。
三、快速失败,快速恢复。
四、回退,尽可能优雅地降级。
五、启用近实时监控、警报和操作控制。

说人话:复杂分布式体系结构中的应用程序有许多依赖项,每个依赖项在某些时候都不可避免地会失败。如果主机应用程序没有与这些外部故障隔离,那么它可能产生的级联错误有可能把每个调用链拖垮。

更详细的资料:Hystrix介绍

5、Feign为什么能够调通服务,但是Hytrix总是熔断

开启Feign服务做熔断client服务后,需要注意,一旦你调用的服务一般在1S内能够响应,你可以不管。

但是假如你调用的服务,你无法预测其在一秒内能够响应,那么你需要配置一下Hystrix超时信息:

ribbon:
  OkToRetryOnAllOperations: false #对所有操作请求都进行重试,默认false
  ReadTimeout: 3000   #负载均衡超时时间,默认值5000
  ConnectTimeout: 1000 #ribbon请求连接的超时时间,默认值2000
  MaxAutoRetries: 0     #对当前实例的重试次数,默认0
  MaxAutoRetriesNextServer: 1 #对切换实例的重试次数,默认1

hystrix:
  command:
    default:  #default全局有效,service id指定应用有效
      execution:
        timeout:
          #如果enabled设置为false,则请求超时交给ribbon控制,为true,则超时作为熔断根据
          enabled: true
        isolation:
          thread:
            timeoutInMilliseconds: 5000 #断路器超时时间,默认1000ms

参考来源:https://blog.csdn.net/weixin_41509621/article/details/88658087

发布了91 篇原创文章 · 获赞 79 · 访问量 63万+

猜你喜欢

转载自blog.csdn.net/yexiaomodemo/article/details/101027537