SpringCloud Feign的使用簡介
簡介
feign是聲明式的web service客戶端,它讓微服務之間的調用變得更簡單了,類似controller調用service。Spring Cloud集成了Ribbon和Eureka,可在使用Feign時提供負載均衡的http客戶端。
在springcloud中不僅可以使用Ribbo進行負載均衡,也可以使用Feign。Feign是在Ribbon的基礎上進行了一次改進,采用接口的方式實現(xiàn)負載均衡。
使用
- 導入依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 編寫對應的接口
@FeignClient(value = "PROVIDER-NAME")聲明這是一個FeignClient,value指明需要的服務id
@FeignClient(value = "PROVIDER-NAME")
public interface DeptClientService {
// 請求的路徑需與服務提供者的路徑一致
@RequestMapping(value = "/dev/add")
boolean add(Dept dept);
@RequestMapping(value = "/dev/{id}")
Dept queryByID(@PathVariable("id") Long id );
@PostMapping(value = "/dev/list")
List<Dept> queryAll();
}
- 修改Controller
我們不再使用RestTemplate來獲取所需的對象,而是通過之前定義的接口來獲取
@RestController
public class ConsumerController {
@Autowired
private DeptClientService service;
@RequestMapping("/consumer/get/{id}")
public Dept getByID(@PathVariable("id") Long id){
return this.service.queryByID(id);
}
@RequestMapping("/consumer/add")
public boolean add(String dname){
Dept dept = new Dept();
dept.setDname(dname);
return this.service.add(dept);
}
@RequestMapping("/consumer/list")
public List<Dept> list(){
return this.service.queryAll();
}
}
- 修改啟動類
@EnableFeignClients 開啟Feign負載均衡
@SpringBootApplication(scanBasePackages = "com")
@EnableEurekaClient
@EnableFeignClients(basePackages = "com.service")
public class FeignApplication {
public static void main(String[] args) {
SpringApplication.run(FeignApplication.class,args);
}
}
- 對比:
Ribbon
public class ConsumerController {
@Autowired
private RestTemplate template;
private static final String url="http://PROVIDER-NAME";
@RequestMapping("/consumer/get/{id}")
public Dept getByID(@PathVariable long id){
//請求的路徑,返回的對象
Dept getEntity = template.getForObject(url + "/dev/" + id, Dept.class);
return getEntity;
}
@RequestMapping("/consumer/add")
public boolean add(String dname){
Dept dept = new Dept();
dept.setDname(dname);
System.out.println(dept);
//請求的路徑,傳遞的參數(shù),返回的對象
return template.postForObject(url+ "/dev/add",dept,Boolean.class);
}
@RequestMapping("/consumer/list")
public List<Dept> list(){
//請求的路徑,返回的對象
return template.postForObject(url+"/dev/list",void.class,List.class);
}
}
Feign
@RestController
public class ConsumerController {
@Autowired
private DeptClientService service;
@RequestMapping("/consumer/get/{id}")
public Dept getByID(@PathVariable("id") Long id){
return this.service.queryByID(id);
}
@RequestMapping("/consumer/add")
public boolean add(String dname){
Dept dept = new Dept();
dept.setDname(dname);
return this.service.add(dept);
}
@RequestMapping("/consumer/list")
public List<Dept> list(){
return this.service.queryAll();
}
}
總結
Feign的使用與Ribbon不同的地方在于
- Feign通過接口來實現(xiàn),更符合我們的面向接口編程的習慣
- 在Ribbon的Controller中我們需要將url拼接,而Feign幫我們進行了拼接
以上就是SpringCloud Feign的使用簡介的詳細內容,更多關于SpringCloud Feign的資料請關注腳本之家其它相關文章!
- Spring Cloud Feign內部實現(xiàn)代碼細節(jié)
- Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔斷的示例
- 完美解決SpringCloud-OpenFeign使用okhttp替換不生效問題
- 基于springcloud異步線程池、高并發(fā)請求feign的解決方案
- 淺談SpringCloud feign的http請求組件優(yōu)化方案
- SpringCloud Open feign 使用okhttp 優(yōu)化詳解
- 詳解SpringCloud-OpenFeign組件的使用
- SpringCloud Feign轉發(fā)請求頭(防止session失效)的解決方案
- 解決Spring Cloud Feign 請求時附帶請求頭的問題
- SpringCloud OpenFeign Post請求400錯誤解決方案
- Spring Cloud Feign原理詳解
相關文章
Mybatis-Plus支持GBase8s分頁查詢的實現(xiàn)示例
本文主要介紹了使?Mybatis-Plus?支持?GBase8s?的分頁查詢,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-01-01
解決CentOS7中運行jar包報錯:xxx(Permission?denied)
在實際工作我們經常會在linux上運行Spring boot編寫的微服務程序,下面這篇文章主要給大家介紹了關于如何解決CentOS7中運行jar包報錯:xxx(Permission?denied)的相關資料,需要的朋友可以參考下2024-02-02
Spring-IOC容器-Bean管理-基于XML方式超詳解
這篇文章主要介紹了Spring為IOC容器Bean的管理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2021-08-08

