国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 幫助中心 > 正文

spring cloud 之 Feign 使用HTTP請求遠程服務的實現方法

2024-07-09 22:40:29
字體:
來源:轉載
供稿:網友

一、Feign 簡介

在spring Cloud Netflix棧中,各個微服務都是以HTTP接口的形式暴露自身服務的,因此在調用遠程服務時就必須使用HTTP客戶端。我們可以使用JDK原生的URLConnection、Apache的Http Client、Netty的異步HTTP Client, Spring的RestTemplate。但是,用起來最方便、最優雅的還是要屬Feign了。

Feign是一種聲明式、模板化的HTTP客戶端。在Spring Cloud中使用Feign, 我們可以做到使用HTTP請求遠程服務時能與調用本地方法一樣的編碼體驗,開發者完全感知不到這是遠程方法,更感知不到這是個HTTP請求。

二、feign的使用在spring cloud中的使用

1、添加依賴

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

2、創建FeignClient 

@FeignClient(name="SPRING-PRODUCER-SERVER/spring")public interface FeignUserClient { @RequestMapping( value = "/findAll/{name}",method = RequestMethod.GET) public List<SpringUser> findAll(@PathVariable("name") String name);  @RequestMapping( value = "/findUserPost",method = RequestMethod.POST) public SpringUser findUserPost(@RequestBody SpringUser springUser);//復合類型好像默認是POST請求}

@FeignClient(name="SPRING-PRODUCER-SERVER/spring"):用于通知Feign組件對該接口進行代理(不需要編寫接口實現),name屬性指定我們要調用哪個服務。使用者可直接通過@Autowired注入。

@RequestMapping表示在調用該方法時需要向/group/{groupId}發送GET請求。

@PathVariable與SpringMVC中對應注解含義相同。

原理:Spring Cloud應用在啟動時,Feign會掃描標有@FeignClient注解的接口,生成代理,并注冊到Spring容器中。生成代理時Feign會為每個接口方法創建一個RequetTemplate對象,該對象封裝了HTTP請求需要的全部信息,請求參數名、請求方法等信息都是在這個過程中確定的,Feign的模板化就體現在這里。

3、啟動類上添加注解

@Configuration@ComponentScan@EnableAutoConfiguration@EnableEurekaClient@EnableFeignClientspublic class SpringConsumerServerFeignApplication {  public static void main(String[] args) {    SpringApplication.run(SpringConsumerServerFeignApplication.class, args);  }}

4、配置文件 application.yml

spring: application: name: spring-consumer-server-feignserver:  port: 8084 context-path: /spring#服務注冊中心的配置內容,指定服務注冊中心的位置eureka: client: serviceUrl:  defaultZone: http://user:password@localhost:8761/eureka/

三、自定義Feign的 配置

1、自定義Configuration

@Configurationpublic class FooConfiguration {  @Bean  public Contract feignContract() {    //這將SpringMvc Contract 替換為feign.Contract.Default    return new feign.Contract.Default();  }}

2、使用自定義的Configuration

@FeignClient(name="SPRING-PRODUCER-SERVER/spring",configuration=FooConfiguration.class)public interface FeignUserClient {  @RequestLine("GET /findAll/{name}")  public List<SpringUser> findAll(@Param("name") String name);   /* @RequestMapping( value = "/findAll/{name}",method = RequestMethod.GET) public List<SpringUser> findAll(@PathVariable("name") String name);  @RequestMapping( value = "/findUserPost",method = RequestMethod.POST) public SpringUser findUserPost(@RequestBody SpringUser springUser);*/}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新龙县| 景东| 米林县| 龙游县| 平遥县| 中阳县| 新津县| 依安县| 西贡区| 乐业县| 石林| 崇州市| 昆山市| 甘泉县| 本溪| 广州市| 哈巴河县| 镇康县| 承德县| 依兰县| 含山县| 博兴县| 冕宁县| 进贤县| 建德市| 永和县| 台中市| 临安市| 瑞金市| 商水县| 张家界市| 天水市| 贞丰县| 丰县| 乌兰县| 洞头县| 富阳市| 鞍山市| 慈溪市| 密云县| 志丹县|