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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

SpringCloud Feign声明式服务调用

發布時間:2023/11/27 生活经验 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringCloud Feign声明式服务调用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SpringCloud Feign聲明式服務調用

    • 1. 加入pom依賴
    • 2. Application.java上聲明@EnableFeignClients
    • 3. @FeignClient聲明接口調用服務名,(SpirngMVC綁定方法,可有可無)
    • 4. Feign負載均衡是通過ribbon實現的
    • 5. 常見問題與解決
    • 6. 小技巧,可調試用
    • 參考

1. 加入pom依賴

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-feign</artifactId>
</dependency>

2. Application.java上聲明@EnableFeignClients

表示允許聲明式feign調用

@EnableEurekaClient
@SpringBootApplication
@EnableFeignClients(basePackages = { "com.service.client.feign.inter" })
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

3. @FeignClient聲明接口調用服務名,(SpirngMVC綁定方法,可有可無)

接口@FeignClient注解指定服務名來綁定服務,然后再使用Spring MVC的注解來綁定具體該服務提供的REST接口。

@FeignClient("hello-service-provider")
public interface HelloServiceFeign {@RequestMapping(value = "/demo/getHost", method = RequestMethod.GET)public String getHost(String name);@RequestMapping(value = "/demo/postPerson", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")public Person postPerson(String name);

注意,(SpirngMVC綁定方法,可有可無),若寫則@RequestMapping需要寫全面,假如XXInterface中Controller層也有 @RestController, @RequestMapping("/hello")

則應該為:

@FeignClient("hello-service-provider")
public interface HelloServiceFeign {@RequestMapping(value = "/hello/demo/getHost", method = RequestMethod.GET)public String getHost(String name);@RequestMapping(value = "/hello/demo/postPerson", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")public Person postPerson(String name);
}

4. Feign負載均衡是通過ribbon實現的

Spring Cloud Feign的客戶端負載均衡是通過Spring Cloud Ribbon實現的,可以直接配置Ribbon客戶端的方式來自定義各個服務客戶端調用參數。

Spring Cloud Ribbon默認負載均衡策略是輪詢策略,不過該不一定滿足我們的需要。Ribbon一共提供了7種負載均衡策略,如果我們需要ZoneAvoidanceRule,首先要在application.properties文件中添加配置,如下所示:

ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.ZoneAvoidanceRule

不過,只是添加了如上配置,還無法實現負載均衡策略的更改。還需要實例化該策略,可以在應用主類中直接加入IRule實例的創建,如下:

/*** 服務調用者,,eureka客戶端 feign調用** @version* @since 1.8*/
@EnableEurekaClient
@SpringBootApplication
@EnableFeignClients(basePackages = { "com.client.feign.inter" })
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}@Beanpublic IRule feignRule() {return new ZoneAvoidanceRule();}
}

5. 常見問題與解決

  • 遇到404,檢查@GetMapping中url
  • 超時,application.yml配置ribbon
  • 還報超時,訪問不到,有可能跨域問題

在controller層增加 @CrossOrigin;

  • 沒報錯,就是返回結果不是期望的值,有可能程序中間有異常報錯
    日志如上,被調用的服務日志打印完全一致,結果不是想要的,最后發現是程序后續處理過程有bug…

6. 小技巧,可調試用

在url處配置服務的ip與端口,調試程序問題;

@FeignClient(name="hello-service-provider",url="http://xxx.xxx.xxx.xxx/")
public interface HelloServiceFeign {@RequestMapping(value = "/hello/demo/getHost", method = RequestMethod.GET)public String getHost(String name);@RequestMapping(value = "/hello/demo/postPerson", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")public Person postPerson(String name);
}

參考

  • https://www.jianshu.com/p/59295c91dde7

總結

以上是生活随笔為你收集整理的SpringCloud Feign声明式服务调用的全部內容,希望文章能夠幫你解決所遇到的問題。

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