日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Feign 简介和使用

發布時間:2024/7/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Feign 简介和使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

聲明式服務消費Feign

    • 一、簡介
    • 二、使用Feign實現服務消費者
    • 三、實現普通的服務提供者
    • 四、Feign服務調用測試
    • 五、Feign消費者測試
        • 負載均衡
        • 服務熔斷

一、簡介

Feign是Netflix公司開發的一個聲明式的REST調用客戶端
Ribbon負載均衡、Hystrix服務熔斷是我們Spring Cloud開發中非常基礎的組件,在使用過程中他們一般是同時出現的,配置也非常相似,每次開發都有許多相同的代碼。因此,Spring Cloud基于Netflix Feign整合了Ribbon和Hystrix兩個組件,讓我們的開發變的更加簡單。
Spring Cloud Feign :對Ribbon負載均衡、Hystrix服務熔斷進行了簡化,在其基礎上進行了進一步的封裝,不僅在配置上大大簡化了開發工作,同時還提供了一種聲明式的Web服務客戶端定義方式。

二、使用Feign實現服務消費者

  • 創建SpringBoot工程
  • 添加依賴
    spring-cloud-starter-netflix-eureka-client
    spring-cloud-starter-openfeign
    spring-cloud-starter-netflix-hystrix
  • 在入口函數上激活功能
    @EnableEurekaClient
    @EnableFeignClients
  • 配置文件
  • # 服務端口號 server.port=80 #指定該服務的名字,該名稱將在服務被調用時使用 spring.application.name=feign-eureka-client-consumer #Eureka配置:服務注冊到哪里 eureka.client.service-url.defaultZone=http://eureka7001:7001/eureka
  • service接口
  • /*** 用于標記當前借口是一個Feign聲明式服務接口。Spring會為這個接口生成動態代理對象* 屬性name:指定注冊中心某個服務的名字*/ @FeignClient(name="feign-eureka-client-provider") public interface TestService {/*** 定義抽象方法* RequestMapping標記這個方法用于訪問服務提供者,參數對應服務提供者提供的方法* @return 服務提供者返回的具體內容*/@RequestMapping("/test")String test();/*** @RequestParam 指定基本數據類型參數*/@RequestMapping("/testParam01")String testParam01(@RequestParam String name, @RequestParam Integer age);/*** @RequestBody 指定對象類型參數*/@RequestMapping("/testParam02")String testParam02(@RequestBody User user);/*** 如果服務提供者返回的Json數據符合Json對象格式* 那么我們可以使用一個實體類或Map集合來接收響應數據*/@RequestMapping("/testReturnUser")User testReturnUser();/*** 如果服務提供者返回的Json數據符合Json對象數組格式* 那么我們可以使用一個List集合來接收響應數據*/@RequestMapping("/testReturnList")List<User> testReturnList(); }
  • controller調用遠程服務
  • /*** 作為服務消費者,可以不使用 RestController 返回json數據,這里為了方便而使用。*/ @RestController public class TestController {@Resourceprivate TestService testService;@RequestMapping("/test")public String test(){String result = testService.test();return "使用了Feign的服務消費者..."+result;}@RequestMapping("/testParam01")public String testParam01(){String result = testService.testParam01("lily",24);return "使用了Feign的服務消費者..."+result;}@RequestMapping("/testParam02")public String testParam02(){User user = new User("xiaoming",23);String result = testService.testParam02(user);return "使用了Feign的服務消費者..."+result;}@RequestMapping("/testReturnUser")public String testReturnUser(){User user = testService.testReturnUser();return "使用了Feign的服務消費者..."+user.toString();}@RequestMapping("/testReturnList")public String testReturnList(){List<User> list = testService.testReturnList();return "使用了Feign的服務消費者..."+list.toString();} }

    三、實現普通的服務提供者

  • 創建SpringBoot工程
  • 添加依賴
    spring-cloud-starter-netflix-eureka-client
  • 在入口函數上激活功能
    @EnableEurekaClient
  • 配置文件
  • server.port=8001#指定該服務的名字,該名稱將在服務被調用時使用 spring.application.name=feign-eureka-client-provider#Eureka配置:服務注冊到哪里 eureka.client.service-url.defaultZone=http://eureka7001:7001/eureka
  • controller提供服務
  • /*** 作為服務提供者,要是用 RestController 返回json數據*/ @RestController public class TestController {@GetMapping("/test")public String test(){return "【服務提供者返回內容】";}@GetMapping("/testParam01")public String testParam01(String name,Integer age){return "【服務提供者返回內容 name:"+name+" age:"+age+"】";}@RequestMapping("/testParam02")public String testParam02(@RequestBody User user){return "【服務提供者返回內容 name:"+user.getName()+" age:"+user.getAge()+"】";}@RequestMapping("/testReturnUser")public Object testReturnUser(){User user = new User("小黃",23);return user;}@RequestMapping("/testReturnList")public Object testReturnList(){List<User> list = new ArrayList<>();User user1 = new User("小黃",23);User user2 = new User("小李",24);User user3 = new User("小明",25);list.add(user1);list.add(user2);list.add(user3);return list;} }

    四、Feign服務調用測試

  • 訪問:http://localhost/test
  • http://localhost/testParam01
  • 訪問:http://localhost/testParam02
  • 訪問:http://localhost/testReturnUser
  • 訪問:http://localhost/testReturnList
  • 五、Feign消費者測試

    負載均衡

    Spring Cloud提供了Ribbon來實現負載均衡,使用Ribbon直接注入一個RestTemplate對象即可,RestTemplate已經做好了負載均衡的配置;在Spring Cloud下,使用Feign也是直接實現負載均衡的,定義一個有@FeignClient注解的接口,然后使用@RequestMapping注解到方法上映射遠程的REST服務,此方法也是做好負載均衡配置的。

    服務熔斷

  • 在application.properties文件開啟feign對hystrix功能支持(支持熔斷)
  • feign.hystrix.enabled=true
  • 指定熔斷回調邏輯
  • /*** @FeignClient:標記當前接口是一個Feign聲明式服務接口,Spring會為這個接口生成動態代理對象* 屬性name:指定注冊中心某個服務的名字* 屬性fallback:指定一個自定義異常熔斷器類* 屬性fallbackFactory:指定一個自定義異常熔斷器類,可以獲得異常信息*/ //方式一 @FeignClient(name="feign-eureka-client-provider",fallback = MyFallback.class) //方式二 @FeignClient(name="feign-eureka-client-provider",fallbackFactory = MyFallbackFactory.class) public interface TestService {...}
  • 自定義異常熔斷器
  • //方式一/*** 自定義異常熔斷器類,并實現自定義聲明式Feign的接口* 為這個接口中的所有抽象方法提供熔斷處理*/ @Component public class MyFallback implements TestService {@Overridepublic String test() {return "test請求熔斷";}@Overridepublic String testParam01(String name, Integer age) {return "testParam01請求熔斷";}@Overridepublic String testParam02(User user) {return "testParam02請求熔斷";}@Overridepublic User testReturnUser() {return null;}@Overridepublic List<User> testReturnList() {return null;} } //方式二/*** 自定義異常熔斷器類,并實現Hystrix的降級回調的父接口* 注意:泛型決定當前類要為哪個聲明式接口提供異常熔斷處理*/ @Component public class MyFallbackFactory implements FallbackFactory<TestService> {/*** @param throwable* @return 返回一個接口中泛型的對象:當這個泛型對象出現異常后將用create返回的這個對象進行降級*/@Overridepublic TestService create(Throwable throwable) {//使用匿名內部類來創建TestService聲明式服務接口的熔斷對象return new TestService() {@Overridepublic String test() {System.out.println(throwable.getClass());System.out.println(throwable.getMessage());return "test請求熔斷";}@Overridepublic String testParam01(String name, Integer age) {return "testParam01請求熔斷";}@Overridepublic String testParam02(User user) {return "testParam02請求熔斷";}@Overridepublic User testReturnUser() {return null;}@Overridepublic List<User> testReturnList() {return null;}};} }
  • 服務異常
  • @GetMapping("/test")public String test(){System.out.println(1/0);return "【服務提供者返回內容】";}
  • 調用服務進行熔斷測試 http://localhost/test
  • 總結

    以上是生活随笔為你收集整理的Feign 简介和使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。