Feigh-微服务远程调用
1.服务调用关系
- 服务提供者:暴露接口给其他微服务调用
- 服务消费者:调用其他微服务提供的接口
- 提供者与消费者角色是相对的
- 一个服务可以同时是服务提供者和服务消费者
2.Feigh是什么
2.1.定义与特点
定义:Feign是一个声明式的伪Http客户端,它采用基于接口的注解方式,将HTTP请求模板化,通过简单的接口和注解定义HTTP请求。
特点:
声明式:Feign通过定义接口和注解来声明需要调用的HTTP服务,让调用远程服务就像调用本地方法一样简单。
模板化:Feign将请求模板化,用户只需要传入参数即可发起请求,无需手动拼接URL和参数。
整合Ribbon:Feign默认集成了Ribbon,支持客户端负载均衡。
支持多种注解:Feign支持Feign注解和JAX-RS注解,同时也支持Spring MVC标准注解。
可插拔的编码器和解码器:Feign支持可插拔的HTTP编码器和解码器,可以根据需要进行定制。
2.2.主要功能
服务调用:Feign使得微服务之间的HTTP调用变得更加简单和方便,通过定义Feign客户端接口,可以像调用本地方法一样调用远程服务。
负载均衡:Feign与Ribbon结合使用,可以实现客户端负载均衡,提高系统的可用性和伸缩性。
服务发现:Feign可以与服务发现组件(如Eureka)结合使用,自动发现服务实例并进行调用。
熔断降级:Feign可以与Hystrix结合使用,实现熔断降级机制,提高系统的容错能力。
2.3.使用场景
Feign通常用于微服务架构中,作为服务消费者调用服务提供者的HTTP接口。在Spring Cloud等微服务框架中,Feign被广泛应用,简化了服务调用的开发工作。
3.Feigh实现微服务接口调用
3.1. 添加 Feign 依赖
首先,在 Spring Boot 项目中添加 Feign 的依赖。(注意替换为适合项目的版本号):
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>你的版本号</version>
</dependency>
3.2. 启用 Feign 客户端
在 Spring Boot 应用主类或配置类上添加 @EnableFeignClients 注解来启用 Feign 客户端。
@SpringBootApplication
@EnableFeignClients
public class YourApplication {
public static void main(String[] args) {
SpringApplication.run(YourApplication.class, args);
}
}
3.3. 创建 Feign 客户端接口
定义一个接口,并使用 Feign 的注解(如 @FeignClient)来指定要调用的服务。在这个接口中,你可以定义你需要调用的方法,并使用 Feign 的注解(如 @GetMapping、@PostMapping 等)来映射 HTTP 请求。
@FeignClient(name = "service-name", url = "http://localhost:8080") // 如果使用服务发现,则不需要指定 url
public interface YourServiceClient {
@GetMapping("/some/path")
YourResponseDTO getSomething();
@PostMapping("/another/path")
YourResponseDTO postSomething(@RequestBody YourRequestDTO request);
}
注意:如果你的微服务架构中使用了服务注册与发现(如 Eureka),则通常不需要在 @FeignClient 注解中指定 url 属性,因为 Feign 会自动通过服务名来解析服务的地址。
3.4. 注入并使用 Feign 客户端
在服务类中,可以通过 Spring 的依赖注入来注入上面定义的 Feign 客户端接口,并像调用本地方法一样调用它的方法。
@Service
public class YourService {
@Autowired
private YourServiceClient yourServiceClient;
public void doSomething() {
YourResponseDTO response = yourServiceClient.getSomething();
// 处理响应
}
}
3.5. 配置 Feign(可选)
你可以通过配置文件或 Java 配置类来自定义 Feign 的行为,如设置连接超时时间、读取超时时间、日志级别等。
例如进行日志配置:
- NONE, 没日志(默认)。
- BASIC, 只记录请求方法和URL以及响应状态代码和执行时间。
- HEADERS, 记录基本信息以及请求和响应头。
- FULL, 记录请求和响应的header、正文和元数据。
logging.level.project.user.UserClient: DEBUG
@Configuration
public class FooConfiguration {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}