Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign
而且Feign默认集成了Ribbon,所以使用Feign默认就实现了负载均衡的效果。
Feign使用
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
在启动类添加注解开启Feign的功能
编写Feign的客户端
在order-service项目中com.xxx.order.client包下新建一个接口,内容如下:
@GetMapping("/user/{id}")
User findById(@PathVariable Long id);
然后再fegin新建包,Client包下新建userClient去连接提供者的service,暴露接口
@FeignClient("userservice")
public interface UserClient {
@GetMapping("/user/{id}")
User findById(@PathVariable Long id);
}
这个客户端主要是基于SpringMVC的注解来声明远程调用的信息,比如
服务名称:userservice
请求方式:GET
请求路径:/user/{id}
请求参数:Long id
返回值类型:User
这样,Feign就可以帮助我们发送http请求,无需自己使用RestTemplate来发送了。
修改OrderService类
使用Feign客户端代替RestTemplate
配置文件方式
基于配置文件修改feign的日志级别可以针对单个服务
feign:
client:
config:
userservice: # 针对某个微服务的配置
loggerLevel: FULL # 日志级别
也可以针对所有服务:
feign:
client:
config:
default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
loggerLevel: FULL # 日志级别
而日志的级别分为四种:
NONE:不记录任何日志信息,这是默认值。
BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据
Java代码方式
也可以基于Java代码来修改日志级别,在com.xxxx.order.config包下创建类,然后声明一个Logger.Level的对象:
public class FeignDefaultConfiguration {
@Bean
public Logger.Level feignLogLevel(){
return Logger.Level.BASIC; // 日志级别为BASIC
}
}
如果要全局生效,将其放到启动类的@EnableFeignClients这个注解中:
@EnableFeignClients(defaultConfiguration = FeignDefaultConfiguration.class)
public class OrderApplication {}
如果是局部生效,则把它放到对应的@FeignClient这个注解中:
@FeignClient(value = "userservice", configuration = FeignDefaultConfiguration .class)
public interface UserClient {}
以上为模板基础的代码实现方式,后续会应用在项目里。