Feign
来源:互联网 发布:淘宝手机店铺装修素材 编辑:程序博客网 时间:2024/06/05 07:49
Feign是spring cloud中服务消费端的调用框架,通常与ribbon,hystrix等组合使用。
但是在某些项目中,由于遗留原因,整个系统并不是spring cloud项目,甚至不是spring项目,而使用者关注的重点仅仅是简化http调用代码的编写。
如果采用httpclient或者okhttp这样相对较重的框架,对初学者来说编码量与学习曲线都会是一个挑战,而使用spring中RestTemplate,又没有配置化的解决方案,由此想到是否可以脱离spring cloud,独立使用Feign。
maven依赖
<dependency> <groupId>com.netflix.feign</groupId> <artifactId>feign-core</artifactId> <version>8.18.0</version></dependency>
自定义接口
import feign.Param;import feign.RequestLine;public interface RemoteService { @RequestLine("GET /users/list?name={name}") String getOwner(@Param(value = "name") String name);}
通过
@RequestLine
指定HTTP协议及URL地址配置类
RemoteService service = Feign.builder() .options(new Options(1000, 3500)) .retryer(new Retryer.Default(5000, 5000, 3)) .target(RemoteService.class, "http://127.0.0.1:8085");
options方法指定连接超时时长及响应超时时长,retryer方法指定重试策略,target方法绑定接口与服务端地址。返回类型为绑定的接口类型。
调用
String result = service.getOwner("scott");
与调用本地方法相同的方式调用feign包装的接口,直接获取远程服务提供的返回值。
附:服务生产者
import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;@Controller@RequestMapping(value="users")public class UserController { @RequestMapping(value="/list",method={RequestMethod.GET,RequestMethod.POST,RequestMethod.PUT}) @ResponseBody public String list(@RequestParam String name) throws InterruptedException{ return name.toUpperCase(); }}
更进一步
在项目中,服务消费端与生产端之间交换的数据往往是一或多个对象,feign同样提供基于json的对象转换工具,方便我们直接以对象形式交互。
业务接口
public interface RemoteService { @Headers({"Content-Type: application/json","Accept: application/json"}) @RequestLine("POST /users/list") User getOwner(User user);}
加入@Headers注解,指定Content-Type为json
配置
RemoteService service = Feign.builder() .encoder(new JacksonEncoder()) .decoder(new JacksonDecoder()) .options(new Options(1000, 3500)) .retryer(new Retryer.Default(5000, 5000, 3)) .target(RemoteService.class, "http://127.0.0.1:8085");
encoder指定对象编码方式,decoder指定对象解码方式。这里用的是基于Jackson的编、解码方式,需要在pom.xml中添加Jackson的依赖
<dependency> <groupId>com.netflix.feign</groupId> <artifactId>feign-jackson</artifactId> <version>8.18.0</version></dependency>
调用
User result = service.getOwner(u);
附:服务生产者
@Controller@RequestMapping(value="users")public class UserController { @RequestMapping(value="/list",method={RequestMethod.GET,RequestMethod.POST,RequestMethod.PUT}) @ResponseBody public User list(@RequestBody User user) throws InterruptedException{ System.out.println(user.getUsername()); user.setId(100L); user.setUsername(user.getUsername().toUpperCase()); return user; }}
唯一的变化就是使用了@RequestBody来接收json格式的数据。
作者:SamHxm
链接:http://www.jianshu.com/p/3d597e9d2d67
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
阅读全文
0 0
- Feign
- Feign
- Feign介绍
- Feign logging
- Feign介绍
- Feign基础教程
- feign入门教程
- SpringCloud(六)springcloud feign
- Spring Cloud feign
- Spring Cloud Feign诠释
- SpringCloudNetflix-Feign/Hystrix Setting
- Eureka、Ribbon和Feign
- spring cloud-feign
- Spring Cloud Feign常见问题
- Feign Hystrix 支持
- feign-使用最佳实践
- springcloud feign 讲解
- Feign的自定义配置
- lombok-程序员不想错过的好工具
- spark中split()特殊符号"." "|" "*" "\" "]"
- JobScheduler5.0源码分析
- Spring学习,@Resource,@Autowried,@Inject
- android实现拍照并转换为base64
- Feign
- PAT 1017. A除以B
- 数据结构JavaScript——集合
- 理解赤池信息量(AIC),贝叶斯信息量(BIC)
- Rhyme/Struts2源码解析以及拦截器原理模拟
- 蓝桥杯 算法提高 质因数
- 在线资料学习记录
- 171216—几种经典加密方法。
- python---post请求数据包,正常模拟登录,图片验证码未自动化,phtesseract