SpringCloud Feign的使用簡介
簡介
feign是聲明式的web service客戶端,它讓微服務(wù)之間的調(diào)用變得更簡單了,類似controller調(diào)用service。Spring Cloud集成了Ribbon和Eureka,可在使用Feign時(shí)提供負(fù)載均衡的http客戶端。
在springcloud中不僅可以使用Ribbo進(jìn)行負(fù)載均衡,也可以使用Feign。Feign是在Ribbon的基礎(chǔ)上進(jìn)行了一次改進(jìn),采用接口的方式實(shí)現(xiàn)負(fù)載均衡。
使用
- 導(dǎo)入依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
- 編寫對應(yīng)的接口
@FeignClient(value = "PROVIDER-NAME")聲明這是一個(gè)FeignClient,value指明需要的服務(wù)id
@FeignClient(value = "PROVIDER-NAME") public interface DeptClientService { // 請求的路徑需與服務(wù)提供者的路徑一致 @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負(fù)載均衡
@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(); } }
總結(jié)
Feign的使用與Ribbon不同的地方在于
- Feign通過接口來實(shí)現(xiàn),更符合我們的面向接口編程的習(xí)慣
- 在Ribbon的Controller中我們需要將url拼接,而Feign幫我們進(jìn)行了拼接
以上就是SpringCloud Feign的使用簡介的詳細(xì)內(nèi)容,更多關(guān)于SpringCloud Feign的資料請關(guān)注腳本之家其它相關(guān)文章!
- Spring Cloud Feign內(nèi)部實(shí)現(xiàn)代碼細(xì)節(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轉(zhuǎn)發(fā)請求頭(防止session失效)的解決方案
- 解決Spring Cloud Feign 請求時(shí)附帶請求頭的問題
- SpringCloud OpenFeign Post請求400錯(cuò)誤解決方案
- Spring Cloud Feign原理詳解
相關(guān)文章
Java課設(shè)案例之百行代碼實(shí)現(xiàn)簡易計(jì)算器
下面這篇文章主要給大家介紹了關(guān)于Java課設(shè)案例之百行代碼實(shí)現(xiàn)簡易計(jì)算器的相關(guān)資料,這是一個(gè)關(guān)于java簡單計(jì)算器的完整課程設(shè)計(jì)以及源碼,需要的朋友可以參考下2023-06-06Mybatis-Plus支持GBase8s分頁查詢的實(shí)現(xiàn)示例
本文主要介紹了使?Mybatis-Plus?支持?GBase8s?的分頁查詢,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01解決CentOS7中運(yùn)行jar包報(bào)錯(cuò):xxx(Permission?denied)
在實(shí)際工作我們經(jīng)常會在linux上運(yùn)行Spring boot編寫的微服務(wù)程序,下面這篇文章主要給大家介紹了關(guān)于如何解決CentOS7中運(yùn)行jar包報(bào)錯(cuò):xxx(Permission?denied)的相關(guān)資料,需要的朋友可以參考下2024-02-02java排查進(jìn)程占用系統(tǒng)內(nèi)存高方法
這篇文章主要為大家介紹了java進(jìn)程占用系統(tǒng)內(nèi)存高排查方法,2023-06-06Spring-IOC容器-Bean管理-基于XML方式超詳解
這篇文章主要介紹了Spring為IOC容器Bean的管理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-08-08