spring cloud学习--Feign
Posted 随风去。
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring cloud学习--Feign相关的知识,希望对你有一定的参考价值。
Feign简介:
Feign是一个声明式的Web服务客户端,使用Feign可使得Web服务客户端的写入更加方便.它具有可插拔注释支持,包括Feign注解和JAX-RS注解、Feign还支持可插拔编码器和解码器、Spring Cloud增加了对Spring MVC注释的支持,并HttpMessageConverters在Spring Web中使用了默认使用的相同方式。Spring Cloud集成了Ribbon和Eureka,在使用Feign时提供负载平衡的http客户端。Fegin对Robbin进行了封装,如果需要配置自己的负载算法,可以自定义Ribbon的算法即可
1.pom文件修改
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies>
2.application.yml
server: port: 8002 eureka: client: register-with-eureka: false service-url: defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/,http://eureka7001.com:7001/eureka/
3.编写ClientService
@FeignClient(value ="cloud-provider-dept") public interface DeptClientService { @RequestMapping(value ="/dept/add",method=RequestMethod.POST) public boolean add(@RequestBody Dept d) ; @RequestMapping(value ="/dept/get/{id}",method=RequestMethod.GET) public Dept get(@PathVariable("id") Long id) ; @RequestMapping(value ="/dept/list",method=RequestMethod.GET) public List<Dept> list() ; }
4.编写Controller
@RestController public class DeptController_consumer { @Autowired private DeptClientService service; @RequestMapping(value ="/consumer/dept/add") public boolean add(@RequestBody Dept d) { return service.add(d); } @RequestMapping(value ="/consumer/dept/get/{id}") public Dept get(@PathVariable("id") Long id) { return service.get(id); } @RequestMapping(value ="/consumer/dept/list") public List<Dept> list() { return service.list(); } }
5.修改主启动类
@SpringBootApplication @EnableEurekaClient @EnableFeignClients(basePackages = {"com.wuzz.springcloud"}) @ComponentScan("com.wuzz.springcloud") public class DeptConsumer_feign_App { public static void main( String[] args ) { SpringApplication.run(DeptConsumer_feign_App.class, args); } }
ribbon和feign区别
Ribbon添加maven依赖 spring-starter-ribbon 使用@RibbonClient(value="服务名称") 使用RestTemplate调用远程服务对应的方法
feign添加maven依赖 spring-starter-feign 服务提供方提供对外接口 调用方使用 在接口上使用 @FeignClient("指定服务名")
Ribbon和Feign的区别:
Ribbon和Feign都是用于调用其他服务的,不过方式不同。
1.启动类使用的注解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。
2.服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。
3.调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。
Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可,
不需要自己构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。
以上是关于spring cloud学习--Feign的主要内容,如果未能解决你的问题,请参考以下文章
Spring Cloud 学习——5.使用 feign 的 hystrix 支持