Java HttpClient FeignClient
来源:互联网 发布:c语言顺序表的初始化 编辑:程序博客网 时间:2024/06/04 20:09
介绍:借用github上对Feign介绍的一句话——用Feign写HTTP客户端更轻松
Feign的入门可以完全参考github上的介绍
github Feign地址
https://github.com/OpenFeign/feign
还有一个比较不错的例子,里面有使用Feign自定义encoder和decoder来操作多媒体的demo
Feign-Client-Test
https://github.com/pcan/feign-client-test
Feign的内部机制是使用RestTemplate来实现
本文主要介绍SpringCloud项目里Feign作为客户端使用的一些知识点,以及常用的一些需求和场景。
需要注意的是单独使用Feign和SpringCloud里面使用Feign很多地方不一样。
SpringCloud里面只需添加如下引用即可
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId></dependency>
在启动的Application上面加注解
@EnableFeignClients
Feign在SpringCloud集成Eureka的情况下可以直接使用@FeignClient(name="servicename") ,name是集成的服务名
当然,也可以在不调用服务的情况下使用Feign,下面上一段代码
@FeignClient(name = "bClientApi", url = "${apiclient.bclient.url}", fallback = IAuthRemoteService.BClientFallback.class,configuration = RemoteApiConfig.class)public interface IAuthRemoteService { /** * B端企业认证(code:1成功 0失败) * @param dto * @return */ @RequestMapping(value = "/qual/company/authe", method = RequestMethod.POST) Result companyAuth(@RequestBody CompanyAuthRemoteDTO dto, @RequestHeader("cookie") String cookie); @Component @Slf4j class BClientFallback implements IAuthRemoteService{ @Override public Result companyAuth(CompanyAuthRemoteDTO dto, String cookie) { log.error("B端企业认证接口异常" + JSON.toJSONString(dto) + cookie); return ResultGenerator.genFailResult("B端企业认证接口异常"); } }}
name在新版本的Feign里面是必须的,可以不是service,而通过url指定,url支持占位符。
fallback是当HTTP请求发生异常时的回调,具体实现逻辑在该类继承的方法里面。
fallback只是在接口异常时执行类里面的实现,无法抓取具体的异常信息。
如果在FeignClient调用接口,接口服务出现异常的情况下需要提取异常信息,可以使用fallbackFactory.
具体示例如下
@FeignClient(value = "bClient", url = "${interfase.user.management}", fallbackFactory = IBClientServiceFallBackFactory.class)public interface IBClientService { /** * 获取B端账户企业信息 * * @return */ @RequestMapping(value = "/qual/company", method = RequestMethod.GET) Result<BCompanyAuthInfo> getCompanyAuthInfo(@RequestHeader("cookie") String cookie);}@Slf4j@Componentclass IBClientServiceFallBackFactory implements FallbackFactory<IBClientService> { @Override public IBClientService create(Throwable cause) { return new IBClientService() { @Override public Result<BCompanyAuthInfo> getCompanyAuthInfo(String cookie) { log.error("获取B端企业认证信息失败" + cookie + cause.getMessage()); Result<BCompanyAuthInfo> res = new Result<>(); res.setCode(ResultCode.FAIL.getCode()); res.setMessage("获取B端企业认证信息失败" + cause.getMessage()); return res; } }; }}
原生的Feign里面请求头的注解是打在方法上面,@Header(),Spring 集成后通过@RequestHeader给方法传参的方式实现,这点要注意。
configuration是Feign的配置信息,可以包括Feign客户端设置、编码解码、日志、Builder。
Spring集成的Feign在不同情况下由不同的组件生成,如果支持Hystrix断路器则交由它来生成Feign
如果不想断路器生成Feign而交由自己控制,则可以在configuration里面如下配置:
@Configurationpublic class FooConfiguration { @Bean@Scope("prototype")public Feign.Builder feignBuilder() {return Feign.builder();}}
Feign的日志可以通过修改配置文件来实现,下面是对应的level:
logging.level.project.user.UserClient: DEBUG
NONE
,无记录(DEFAULT)。
BASIC
,只记录请求方法和URL以及响应状态代码和执行时间。
HEADERS
,记录基本信息以及请求和响应标头。
FULL
,记录请求和响应的头文件,正文和元数据
logging.level.project.user.UserClient: DEBUG
NONE
,无记录(DEFAULT)。
BASIC
,只记录请求方法和URL以及响应状态代码和执行时间。
HEADERS
,记录基本信息以及请求和响应标头。
FULL
,记录请求和响应的头文件,正文和元数据
如果不想让Feign使用默认的RestTemplate调用HttpClient作为客户端可以通过将feign.okhttp.enabled
或feign.httpclient.enabled
设置为true
,并将它们放在类路径上来使用OkHttpClient和ApacheHttpClient feign客户端。
- Java HttpClient FeignClient
- FeignClient Caused by: java.lang.IllegalArgumentException
- Spring @FeignClient
- FeignClient相关
- JAVA HTTPCLIENT
- java httpClient
- FeignClient 设置 fallback不起作用
- FeignClient 代码示例
- FeignClient 设置 fallback不起作用
- RequestInterceptor FeignClient header
- feignclient设置hystrix参数
- springcloud 剔除@FeignClient
- Java 客户端HttpClient 开发
- JAVA实现httpClient实例
- java httpclient(1)
- java HttpClient Post实例
- Java HttpClient实例
- java httpclient模拟login
- 逆序数 51Nod
- Redis学习笔记
- c语言之路
- 实验四 系统登录/注册模块(Android app)的开发
- 使用C++进行日期处理(算法类,以日期差值为例)
- Java HttpClient FeignClient
- The CMA(Covariance matrix Adaptation) Evolution Strategy
- JSP多表单post向不同的网页
- HUSTOJ problems
- redirect和forward区别
- HPC TOP500中国第一四连冠背后 联想HPC业务登顶全球是新目标
- Spring boot
- Java接口事件
- Vue.set和Vue.delete属性的简单使用