zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Ribbon本地负载均衡客户端 VS Nginx服务端负载均衡 以及 远程调用

2023-04-18 16:49:58 时间

目录

Ribbon本地负载均衡客户端 VS Nginx服务端负载均衡

被调用的服务:

远程调用服务:

 测试

OpenFeign默认超时时间

修改OpenFeign的默认超时时间

OpenFeign的日志监控


Ribbon本地负载均衡客户端 VS Nginx服务端负载均衡


Nginx是服务器负载均衡,客户端所有请求都会交给nginx,然后由nginx实现转发请求。即负载均衡是由服务端实现的。
 
Ribbon本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。

它们之间的关系像是:

客户端发送某个查询请求,先通过nginx反向代理,nginx采用负载均衡到后台某一指定服务器接口但是该服务器接口业务逻辑的实现依赖于其他服务,因此内部还需要远程调用其他服务。
由因为需要被远程调用的服务也是集群模式,因此需要本地负载均衡。
而ribbon就是本地负载均衡的客户端工具。
Nacos、Eureka这些注册中心内部都内置了Ribbon,因此不需要我们额外引入依赖。
我们可以通过RestTemplate、OpenFeign等工具实现远程调用。
而OpenFeign自带负载均衡配置项,不需要再单独配置。
但是RestTemplate需要加上@LoadBalanced注解来完成远程调用的负载均衡。

Nacos中集成了Ribbon,可以实现本地负载均衡。也即是我们RestTemplate进行远程调用某一集群服务的时候,就可以实现轮询。前提是RestTemplate的bean对象必须添加@LoadBalanced注解,赋予RestTemplate负载均衡的能力,负载均衡才可以。

当然了,远程调用,我们除了使用RestTemplate,也可以使用OpenFeign的方式。

举例说明:

被调用的服务:

sms系统,我们模拟两台,都注册到nacos注册中心上去。我们提供了被调用的测试接口为:/test1

 

远程调用服务:

同样需要加入到nacos注册中心,

然后我们通过springmvc提供的RestTemplate进行远程调用刚才sms系统提供的/test接口。

使用restTemplate,我们最好将他创建为单例bean。因为被远程调用的服务是集群,所以必须@LoadBalanced注解。

 测试

我们直接通过访问pps服务的/pps/ok接口,看看是否能调用到sms系统的/test接口

 可以,而且是轮询的在调用。

如果不想使用RestTemplate,也可以使用OpenFeign进行远程调用。

使用OpenFeign,则需要引入相关的依赖

主启动类需要加上@EnableFeignClients注解

 

然后远程调用接口

编写测试方法测试

 

 成功,以上两种方式进行远程调用,都可以实现负载均衡~

当然除了这些,HttpClient也可以实现远程调用,Java自带的HttpUrlConnection也可以。至于它们能否实现对集群的访问,这里就不研究了。

我们实际开发中,更倾向于使用openfeign进行远程调用。它的书写方式和日常开发接口很相似。

OpenFeign默认超时时间

OpenFeign默认超过1s没有返回结果直接报超时异常。

下面我们模拟看看:

 下面重启项目,测试访问

控制台直接报超时异常

但是使用restTemplate进行远程调用的方式不存在这个超时的问题。

修改OpenFeign的默认超时时间

 默认Feign客户端只等待一秒钟,但是服务端处理需要超过1秒钟,导致Feign客户端不想等待了,直接返回报错。
为了避免这样的情况,有时候我们需要设置Feign客户端的超时控制。

 

 

OpenFeign的日志监控

Feign 提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解 Feign 中 Http 请求的细节。

说白了就是对Feign接口的调用情况进行监控和输出。

它提供的日志级别有如下四种:

 使用的方式很简单:

 ok,直接测试接口,成功!