本文共 3226 字,大约阅读时间需要 10 分钟。
OpenFeign是一种声明式、模板化的HTTP请求,相比前面我们使用RestTemplate的方式,OpenFeign能够更加的便捷、优雅的完成微服务之间的HTTP调用。
OpenFeign的使用也非常简单,通过注解的方式即可完成,使调用者感觉就像是在调用服务内部的接口一样,同时Openfeign还集成了Hystrix和Ribbon,使得调用可以自然的实现负载均衡和Hystrix相关的功能。
接着上一遍Ribbon环境,搭建OpenFeign也非常简单。
1、引入jar包
org.springframework.cloud spring-cloud-starter-openfeign
2、启动类添加@EnableFeignClients注解
@EnableEurekaClient@SpringBootApplication@EnableFeignClientspublic class MembershipApplication { public static void main(String[] args) { SpringApplication.run(MembershipApplication.class, args); }}
3、定义FeignClient接口,name是要调用的服务名。
@FeignClient(name = "order")public interface OrderFeign { @RequestMapping(value = "/userOrder/getOrderInfo", method = RequestMethod.GET) String getOrderInfo();}
4、调用
@RestController@RequestMapping("/user")public class UserController { @Autowired private OrderFeign orderFeign; @PostMapping("/queryOrder") public String queryOrder() { String str = orderFeign.getOrderInfo(); return str; }}
4步即完成了一个服务之间的请求,服务提供方无需任何修改。
为每个Feign客户端创建一个logger。默认情况下,logger的名称是用于创建Feign客户端的接口的全类名称。Feign日志记录仅响应DEBUG级别。
可以通过修改Logger.Level来控制日志记录的内容:
/** * Controls the level of logging. */ public enum Level { /** * No logging. */ NONE, /** * Log only the request method and URL and the response status code and execution time. */ BASIC, /** * Log the basic information along with request and response headers. */ HEADERS, /** * Log the headers, body, and metadata for both requests and responses. */ FULL }
NONE:无日志记录(DEFAULT)。
BASIC:仅记录请求方法和URL以及响应状态代码和执行时间。 HEADERS:记录基本信息以及请求和响应头。 FULL:记录请求和响应的标题,正文和元数据。1、配置文件的方式
feign.client.config.order.logger-level=fulllogging.level.com.wyl.springcloud.feign.OrderFeign=debug
2、编码的方式
新增:configuration = FeignConfig.class
@FeignClient(name = "order",configuration = FeignConfig.class)public interface OrderFeign { @RequestMapping(value = "/userOrder/getOrderInfo", method = RequestMethod.GET) String getOrderInfo();}
FeignConfig
import feign.Logger;import org.slf4j.LoggerFactory;import org.springframework.cloud.openfeign.FeignLoggerFactory;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class FeignConfig { @Bean Logger.Level feignLevel() { return Logger.Level.FULL; } @Bean FeignLoggerFactory orderFeignLoggerFactory() { return new OrderFeignLoggerFactory(); } public static class OrderFeignLoggerFactory implements FeignLoggerFactory { @Override public Logger create(Class type) { return new OrderFeignLogger(LoggerFactory.getLogger(type)); } }}
import org.slf4j.Logger;public class OrderFeignLogger extends feign.Logger { private final Logger logger; public OrderFeignLogger(Logger logger) { this.logger = logger; } @Override protected void log(String configKey, String format, Object... args) { if (logger.isInfoEnabled()) { logger.info(String.format(methodTag(configKey) + format, args)); } }}
转载地址:http://bllrb.baihongyu.com/