亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

SpringCloud實戰之Feign聲明式服務調用

2024-07-14 08:40:51
字體:
來源:轉載
供稿:網友

在前面的文章中可以發現當我們通過RestTemplate調用其它服務的API時,所需要的參數須在請求的URL中進行拼接,如果參數少的話或許我們還可以忍受,一旦有多個參數的話,這時拼接請求字符串就會效率低下,并且顯得好傻。

那么有沒有更好的解決方案呢?答案是確定的有,Netflix已經為我們提供了一個框架:Feign。

Feign是一個聲明式的Web Service客戶端,它的目的就是讓Web Service調用更加簡單。Feign提供了HTTP請求的模板,通過編寫簡單的接口和插入注解,就可以定義好HTTP請求的參數、格式、地址等信息。

而Feign則會完全代理HTTP請求,我們只需要像調用方法一樣調用它就可以完成服務請求及相關處理。Feign整合了Ribbon和Hystrix(關于Hystrix我們后面再講),可以讓我們不再需要顯式地使用這兩個組件。

總起來說,Feign具有如下特性:

  1. 可插拔的注解支持,包括Feign注解和JAX-RS注解;
  2. 支持可插拔的HTTP編碼器和解碼器;
  3. 支持Hystrix和它的Fallback;
  4. 支持Ribbon的負載均衡;
  5. 支持HTTP請求和響應的壓縮。

這看起來有點像我們springmvc模式的Controller層的RequestMapping映射。這種模式是我們非常喜歡的。Feign是用@FeignClient來映射服務的。

首先第一步,在原來的基礎上新建一個Feign模塊,接著引入相關依賴,引入Feign依賴,會自動引入Hystrix依賴的,如下:

    <dependency>      <groupId>org.springframework.cloud</groupId>      <artifactId>spring-cloud-starter-eureka</artifactId>      <version>1.3.5.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework.cloud</groupId>      <artifactId>spring-cloud-starter-feign</artifactId>      <version>1.4.0.RELEASE</version>    </dependency>

application.yml配置如下:

server: port: 8083spring: application:  name: feign-consumereureka: client:  service-url:   defaultZone: http://localhost:8888/eureka/,http://localhost:8889/eureka/

接著在前面文章中的的的兩個provider1和provider2兩個模塊的服務新增幾個方法,如下代碼所示:

/** * Created by cong on 2018/5/8. */@RestControllerpublic class HelloController {  @RequestMapping("/hello")  public String hello(){    System.out.println("訪問來1了......");    return "hello1";  }  @RequestMapping("/hjcs")  public List<String> laowangs(String ids){    List<String> list = new ArrayList<>();    list.add("laowang1");    list.add("laowang2");    list.add("laowang3");    return list;  }  //新增的方法  @RequestMapping(value = "/hellol", method= RequestMethod.GET)  public String hello(@RequestParam String name) {    return "Hello " + name;  }  @RequestMapping(value = "/hello2", method= RequestMethod.GET)  public User hello(@RequestHeader String name, @RequestHeader Integer age) {    return new User(name, age);  }  @RequestMapping(value = "/hello3", method = RequestMethod.POST)  public String hello (@RequestBody User user) {    return "Hello "+ user. getName () + ", " + user. getAge ();  }}

接著是上面代碼所需用到的User類,代碼如下:

/** * Created by cong 2017/12/2. */public class User {  private String name;  private Integer age;  //序列化傳輸的時候必須要有空構造方法,不然會出錯  public User() {  }  public User(String name, Integer age) {    this.name = name;    this.age = age;  }  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }  public Integer getAge() {    return age;  }  public void setAge(Integer age) {    this.age = age;  }}

接下來用Feign的@FeignClient(“服務名稱”)映射服務調用。代碼如下:

package hjc;import org.springframework.cloud.netflix.feign.FeignClient;import org.springframework.web.bind.annotation.*;/** * Created by cong on 2018/5/17. *///configuration = xxx.class 這個類配置Hystrix的一些精確屬性//value=“你用到的服務名稱”@FeignClient(value = "hello-service",fallback = FeignFallBack.class)public interface FeignService {  //服務中方法的映射路徑  @RequestMapping("/hello")  String hello();  @RequestMapping(value = "/hellol", method= RequestMethod.GET)  String hello(@RequestParam("name") String name) ;  @RequestMapping(value = "/hello2", method= RequestMethod.GET)  User hello(@RequestHeader("name") String name, @RequestHeader("age") Integer age);  @RequestMapping(value = "/hello3", method= RequestMethod.POST)  String hello(@RequestBody User user);}

接著在Controller層注入FeiService這個接口,進行遠程服務調用,代碼如下:

/** * Created by cong on 2018/5/17. */@RestControllerpublic class ConsumerController {  @Autowired  FeignService feignService;  @RequestMapping("/consumer")  public String helloConsumer(){    return feignService.hello();  }  @RequestMapping("/consumer2")  public String helloConsumer2(){    String r1 = feignService.hello("hjc");    String r2 = feignService.hello("hjc", 23).toString();    String r3 = feignService.hello(new User("hjc", 23));    return r1 + "-----" + r2 + "----" + r3;  }}

接著在Feign模塊的啟動類哪里打上Eureka客戶端的注解@EnableDiscoveryClient  Feign客戶端的注解

@EnableFeignClients,代碼如下:@SpringBootApplication@EnableDiscoveryClient@EnableFeignClientspublic class FeignApplication {  public static void main(String[] args) {    SpringApplication.run(FeignApplication.class, args);  }}

接著啟動啟動類,瀏覽器上輸入localhost:8083/consumer  運行結果如下:

SpringCloud,聲明式服務調用,Feign

SpringCloud,聲明式服務調用,Feign

可以看到負載均衡輪詢出現hello1,hello2。

接著繼續在瀏覽器上輸入localhost:8083/consumer2,運行結果如下:

SpringCloud,聲明式服務調用,Feign

接下來我們進行Feign聲明式調用服務下的,服務降級的使用,那么我們就必須新建一個FeignFallBack類來繼承FeiService,代碼如下:

package hjc;import org.springframework.stereotype.Component;/** * Created by cong on 2018/5/17. */@Componentpublic class FeignFallBack implements FeignService{  //實現的方法是服務調用的降級方法  @Override  public String hello() {    return "error";  }  @Override  public String hello(String name) {    return "error";  }  @Override  public User hello(String name, Integer age) {    return new User();  }  @Override  public String hello(User user) {    return "error";  }}

接著我們再把那兩個服務提供模塊provider1,provider2模塊進行停止,運行結果如下所示:

SpringCloud,聲明式服務調用,Feign

可以看到我們這幾個調用,都進行了服務降級了。

那么如果我們想精確的控制一下Hystrix的參數也是可以的,比方說跟Hystrix結合的參數,那么可以在FeignClient注解里面配置一個Configuration=XXX類.class屬性,在哪個類里面精確的指定一下屬性。

或者在application.yml里面配置,如下:

hystrix: command:  default:   execution:    isolation:     thread:      timeoutinMilliseconds: 5000ribbon: connectTimeout: 500 #如果想對單獨的某個服務進行詳細配置,如下hello-service: ribbon:  connectTimeout: 500

這里滿足了我們大部分場景的調用,但是有寫精細場景,還是要用原生的Hystrix,跟我們之前的Hystrix用法一下,不要走Feign客戶端調用就行了,如下:

/** * Created by cong on 2018/5/17. */public class HjcCommand extends HystrixCommand {  protected HjcCommand(HystrixCommandGroupKey group) {    super(group);  }  @Override  protected Object run() throws Exception {    return null;  }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久国产视频91| 久久亚洲国产成人| 日韩在线观看免费全集电视剧网站| 亚洲欧洲国产精品| 国模叶桐国产精品一区| 亚洲视频电影图片偷拍一区| 亚洲欧美激情精品一区二区| 欧美性精品220| 日韩电视剧在线观看免费网站| 亚洲欧美一区二区精品久久久| 日韩免费高清在线观看| 一本色道久久88综合亚洲精品ⅰ| 国产在线观看精品| 国产精品日韩专区| 日韩精品中文字幕有码专区| 91精品国产99久久久久久| 精品人伦一区二区三区蜜桃免费| 亚洲精品视频在线播放| 最好看的2019的中文字幕视频| 国产亚洲一区二区在线| 一区二区三区精品99久久| 性欧美视频videos6一9| 国产精品aaaa| 国产日韩欧美日韩| 日韩视频在线观看免费| 精品久久久久久久久久久久| 国产精品视频久| 欧美理论电影在线观看| 国产伦精品一区二区三区精品视频| 精品成人在线视频| 日韩男女性生活视频| 欧美丰满老妇厨房牲生活| 在线观看亚洲视频| 欧美亚洲视频在线观看| 国产精品自产拍高潮在线观看| 成人h片在线播放免费网站| 亚洲天堂一区二区三区| 国产一区二区激情| 国产91精品久久久久久久| 国产精品高清在线观看| 欧美日韩中文字幕日韩欧美| 欧美福利视频在线观看| 亚洲欧美日韩精品久久奇米色影视| 人人做人人澡人人爽欧美| 亚洲国产精品久久久久秋霞蜜臀| 成人精品在线观看| 亚洲片国产一区一级在线观看| 亚洲视频自拍偷拍| 日韩美女视频免费看| 亚洲欧美精品一区| 国产欧美日韩免费看aⅴ视频| 亚洲va欧美va在线观看| 欧美孕妇孕交黑巨大网站| 欧美日韩一区二区三区在线免费观看| 国产精品精品一区二区三区午夜版| 久久久www成人免费精品| 欧亚精品在线观看| 日韩精品在线免费播放| 不卡中文字幕av| 久久99国产综合精品女同| 超碰91人人草人人干| 热久久视久久精品18亚洲精品| 亚洲精品美女久久久| 久久久女人电视剧免费播放下载| 91精品国产综合久久香蕉最新版| 亚洲美腿欧美激情另类| 久久999免费视频| 欧美尤物巨大精品爽| 热久久美女精品天天吊色| 在线电影欧美日韩一区二区私密| 青青在线视频一区二区三区| 亚洲跨种族黑人xxx| 欧美在线一区二区视频| 日韩美女写真福利在线观看| 国产在线观看一区二区三区| 国自产精品手机在线观看视频| 亚洲欧美日韩精品久久奇米色影视| 欧美成人午夜激情在线| 国产美女直播视频一区| 成人xxxx视频| 久久香蕉国产线看观看av| 久久天天躁狠狠躁夜夜av| 在线观看中文字幕亚洲| 国产91露脸中文字幕在线| 欧美视频国产精品| 国产午夜精品理论片a级探花| 91国内产香蕉| 国产精品久久久久av免费| 亚洲国内精品在线| 97国产精品人人爽人人做| 久久久久中文字幕2018| 日韩av一区在线| 欧美在线日韩在线| 九九九久久久久久| 成人免费看片视频| 亚洲曰本av电影| 久久精品国产清自在天天线| 久久中文久久字幕| 国产成人精品一区二区在线| 国产精品视频xxxx| 日韩天堂在线视频| 欧美日本啪啪无遮挡网站| 欧美日韩国产麻豆| 国产综合在线视频| 日韩精品中文字幕久久臀| 国产成人极品视频| 久久99精品视频一区97| 欧美在线视频一二三| 欧美肥老妇视频| 综合激情国产一区| 久久久电影免费观看完整版| 国产精品亚洲自拍| 播播国产欧美激情| 欧美精品一二区| 91在线免费观看网站| 国产精品久在线观看| 日韩av在线免费播放| 中文字幕av一区| 日韩av电影在线播放| 中国日韩欧美久久久久久久久| 久久精品美女视频网站| 在线观看日韩视频| 少妇高潮久久久久久潘金莲| 97在线视频一区| 欧美乱大交xxxxx另类电影| 亚洲欧洲一区二区三区久久| 国产精品久久久久久久久粉嫩av| 亚洲精品中文字| 成人网页在线免费观看| 国产美女精品视频| 2019中文在线观看| 91精品国产777在线观看| 中文字幕精品久久| 91大神在线播放精品| 成人久久18免费网站图片| 欧美电影免费观看大全| 2019中文字幕免费视频| 国产在线播放不卡| 久久精品视频亚洲| 久久久久在线观看| 亚洲女同性videos| 精品久久久久久久久久久久| 欧美激情久久久久| 欧美激情一区二区三区成人| 午夜精品久久久久久久男人的天堂| 2019国产精品自在线拍国产不卡| 欧美精品久久久久a| 久久久久久久久久国产精品| 亚洲色图五月天| 98精品国产自产在线观看| 欧美放荡办公室videos4k| 欧美巨大黑人极品精男| 国产福利成人在线| 国产91免费观看| 在线色欧美三级视频| 在线观看国产精品淫| 91黑丝在线观看| 最近2019年中文视频免费在线观看| 欧美日韩一区免费| 精品中文字幕乱| 91av在线影院| 在线观看精品国产视频| 午夜美女久久久久爽久久| 日韩毛片中文字幕|