1、Feign远程调用
Feign是Spring Cloud提供的⼀个声明式的伪Http客户端, 它使得调⽤远程服务就像调⽤本地服务⼀样简单, 只需要创建⼀个接⼝并添加⼀个注解即可。 Nacos很好的兼容了Feign, Feign 默认集为Ribbon, 所以在Nacos下使⽤Fegin默认就实现了负载均衡的效果。
1.1基本使用
(1)、加入Fegin的依赖
(2)、在主类上添加注解@EnableFeignClients,开启Fegin
(3)、在order中创建一个service接口,并使用Feigin实现微服务调用
(4)、修改controller代码,并启动验证,通过fegin调用商品微服务
1.2自定义配置
配置文件方式:
基于配置⽂件修改feign的⽇志级别可以针对单个服务:
针对所有服务:设置日志级别
-
FULL:记录所有请求和响应的明细,包括头信息,强求体,元数据
-
NONE:不记录任何日志信息,这是默认值
-
BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
-
HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
指定了com.apesource包及其子包中所有类的日志级别为debug
1.3 Feign使用优化
(1)引入依赖:⽤Apache的HttpClient
(2)配置连接池
-
⽇志级别尽量⽤basic
-
使⽤HttpClient或OKHttp代替URLConnection
引⼊feign-httpClient依赖 配置⽂件开启httpClient功能,设置连接池参数
2、Dubbo远程调用
Dubbo进行微服务通信,一个高性能、轻量级的Java RPC(远程过程调用)框架。它主要用于解决分布式系统中服务之间的通信问题,提供了面向接口的远程方法调用、智能容错和负载均衡、服务自动注册和发现等核心能力,通过定义服务接口、实现服务接口、注册服务到注册中心、以及服务消费者通过注册中心(Nacos)发现服务并进行远程调用等步骤来实现微服务之间的通信。
2.1基础实现
(1)提供同一业务api
(2)、服务提供者product
添加依赖
添加dubbo配置
编写暴露服务
(3)服务消费者order
添加依赖
添加dubbo配置
引用服务
Feign和Dubbo的联系和区别:
联系
-
目的相同:Feign和Dubbo都旨在简化微服务之间的服务调用,提高系统的灵活性和可维护性。
-
注册中心依赖:两者都依赖于注册中心(如Nacos、Eureka等)来实现服务的注册与发现,从而动态地管理服务的地址和状态。
-
服务治理:Feign和Dubbo都支持服务治理功能,如负载均衡、容错等,以提高系统的稳定性和可用性。
区别
-
设计理念和使用场景
-
Feign:Feign是Spring Cloud组件之一,它是一个声明式的、模板化的HTTP客户端。Feign主要用于简化与RESTful服务的通信,适用于需要与多个外部服务交互的微服务应用。它基于HTTP协议,通过注解和动态代理机制来调用远程服务,使得调用远程服务就像调用本地服务一样简单。
-
Dubbo:Dubbo是阿里巴巴开源的一个高性能Java RPC框架,它提供了面向接口的远程方法调用、智能容错和负载均衡以及服务自动注册和发现等功能。Dubbo更适用于基于Java的大型企业级应用,特别是当服务之间需要频繁的、高效率的内部通信时。Dubbo支持多种传输协议(如Dubbo协议、HTTP、RMI等),可以根据业务场景选择最佳的通信方式。
-
-
通信协议
-
Feign:Feign默认使用HTTP/HTTPS协议进行通信
-
Dubbo:Dubbo支持多种传输协议,但默认使用基于Netty的TCP长连接进行通信。长连接可以复用TCP连接,减少连接建立和断开的开销,从而提高系统的性能和吞吐量。Dubbo协议适合数据量小、高并发和服务提供者远远少于消费者的场景。
-
-
负载均衡和容错
-
Feign:Feign的负载均衡通常通过与Ribbon集成来实现,支持多种负载均衡策略(如随机、轮询等)。容错和断路器功能通过与Hystrix集成来实现,提供了服务降级、服务熔断等功能。
-
Dubbo:Dubbo内置了多种负载均衡策略(如随机、权重轮询、最少活跃调用数等),并且支持更灵活的路由策略。Dubbo也提供了内置的容错机制,如失败重试、快速失败等。
-
-
配置方式
-
Feign:Feign的使用更加声明式,通过Java接口和注解来定义服务调用,简化了HTTP客户端的创建。它主要集成在Spring Cloud生态系统中,与Spring Cloud的其他组件(如Eureka、Ribbon、Hystrix)有良好的集成性。
-
Dubbo:Dubbo的配置方式更加灵活,不仅支持代码配置,还支持XML配置和注解配置。它作为一个独立的RPC框架,可以与各种服务注册中心、配置中心等集成,适用于多种应用场景。
-