Feign是一个声明式的Web服务客户端(Web服务客户端就是Http客户端),让编写Web服务客户端变得非常容易,只需创建一个接口并在接口上添加注解即可。
其一般是在项目中进行声明使用。我认为这样做的缺点是使feign与项目强耦合。
我认为将feign提出做为一个单独module来处理是一个相对较好的解决方案。
以下是相关的代码:
1、pom中增加以下依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
2、定义client
@FeignClient(value = "userservice")
public interface UserClient {
@GetMapping("/user/{id}")
User findById(@PathVariable("id") Long id);
}
client中相关的类也要声明
@Data
public class User {
private Long id;
private String username;
private String address;
}
3、配置feign的日志输出级别(这步可以视情况而定)
public class DefaultFeignConfiguration {
@Bean
public Logger.Level logLevel(){
return Logger.Level.BASIC;
}
}
Logger.Level包括: NONE,BASIC,HEADERS,FULL 四种;
4、引入该module
在需要使用feign的module中增加pom配置:
<!--引入feign的统一api-->
<dependency>
<groupId>com.demo</groupId>
<artifactId>feign-api</artifactId>
<version>1.0</version>
</dependency>
Application类中添加@EnableFeignClients(clients = {UserClient.class})注解
当定义的feignclient不在springbootapplication的扫描包范围时,这些feignclient无法使用。有两种解决方案:
a、 方案一:指定feignClient所在包。全部扫描 @EnableFeignClients(basePackage="cn.itcast.feign.clients")
b、 方案二:指定feignclient字节码。可以指定多个,用到哪个指定哪个
@EnableFeignClients(clients={UserClient.class,XXX.class})
如只用一个可以这样写:
@EnableFeignClients(clients=UserClient.class)
Feign是一个声明式的Web服务客户端,简化了HTTP客户端的创建过程。本文探讨了将Feign与项目强耦合的问题,并提出将其作为一个独立模块以降低耦合度的解决方案。文中详细介绍了如何配置Feign的依赖、定义客户端、设置日志级别,以及在不同场景下如何在Spring Boot应用中启用和引用Feign客户端。
2万+

被折叠的 条评论
为什么被折叠?



