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