下面我来给你详细讲解 SpringCloud 学习笔记中的 OpenFeign 进行服务调用的完整攻略。
什么是 OpenFeign
OpenFeign 是一个基于 Netflix Feign 客户端的开源声明式服务调用框架,它比 RestTemplate 更加简洁、方便、灵活。它的主要作用是帮助开发者快速便捷地实现微服务之间的调用。
如何使用 OpenFeign
准备工作
在使用 OpenFeign 之前,需要引入以下 Maven 依赖包:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
配置
-
启动类上添加
@EnableFeignClients
注解开启 Feign 功能。 -
编写 Feign 接口,使用
@FeignClient
注解对目标微服务进行声明。
@FeignClient("服务名称")
public interface SomeServiceClient {
@GetMapping("/api/some-method")
String getSomeMethod();
}
- 调用 Feign 接口。
@RestController
public class SomeController {
@Autowired
private SomeServiceClient someServiceClient;
@GetMapping("/some-controller")
public String someControllerMethod() {
return someServiceClient.getSomeMethod();
}
}
示例说明
示例一:基本使用
假设我们有两个微服务:service-a 和 service-b,现在需要在 service-a 中调用 service-b 的接口。这时可以通过 OpenFeign 进行服务调用。
- 引入 Maven 依赖包:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 添加
@EnableFeignClients
注解开启 Feign 功能。
@SpringBootApplication
@EnableFeignClients
public class ServiceAApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceAApplication.class, args);
}
}
- 在 service-a 中编写 Feign 接口,声明调用 service-b 的
/api/service-b/hello
接口。
@FeignClient("service-b")
public interface ServiceBClient {
@GetMapping("/api/service-b/hello")
String hello();
}
- 在 service-a 的 Controller 中进行调用。
@RestController
@RequestMapping("/service-a")
public class ServiceAController {
@Autowired
private ServiceBClient serviceBClient;
@GetMapping("/hello")
public String hello() {
return "service-a:" + serviceBClient.hello();
}
}
这样当访问 service-a 的 /service-a/hello
接口时,就能够成功调用 service-b 的 /api/service-b/hello
接口并返回结果了。
示例二:Feign 自定义配置
在默认情况下,OpenFeign 会使用 Spring MVC 的注解并配置一些默认值。如果需要自定义 Feign 的行为,可以通过一个配置类来实现。
@Configuration
public class FeignConfiguration {
@Bean
public Retryer feignRetryer() {
return new Retryer.Default();
}
@Bean
public RequestInterceptor feignRequestInterceptor() {
return new RequestInterceptor() {
@Override
public void apply(RequestTemplate requestTemplate) {
// 实现自己的逻辑
}
};
}
}
在上述代码中,我们自定义了一个 FeignConfiguration
配置类,并提供了两个 Bean:feignRetryer
和 feignRequestInterceptor
。
其中,feignRetryer
配置了 Feign 的重试机制,默认为不重试,这里使用了默认的策略,即重试 5 次,相邻重试间隔时间为 100 毫秒。
feignRequestInterceptor
则配置了一个 Feign 请求拦截器,可以在进行请求时进行一些必要的处理,例如添加请求头等。
以上就是 OpenFeign 进行服务调用的完整攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringCloud学习笔记之OpenFeign进行服务调用 - Python技术站