亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

springboot單獨使用feign簡化接口調(diào)用方式

 更新時間:2022年03月01日 10:11:55   作者:哎呀呀的博客  
這篇文章主要介紹了springboot單獨使用feign簡化接口調(diào)用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

單獨使用feign簡化接口調(diào)用

與HttpClient和RestTemplate相比,使用springcloud的feign調(diào)用遠程接口更為簡便,可以通過配置的方式實現(xiàn)遠程接口調(diào)用。但是有時我們并不想使用springcloud,而只是想在springboot中使用feign,我在網(wǎng)上搜了很多springboot單獨集成feign的文章,但都不能用。在通過學習、開發(fā)后簡單整理了一個教程。詳細介紹如何在springboot中單獨集成feign,以簡便的方式調(diào)用遠程接口。

1.引入maven

? ? <parent>
? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? <artifactId>spring-boot-starter-parent</artifactId>
? ? ? ? <version>2.2.2.RELEASE</version>
? ? ? ? <relativePath/> <!-- lookup parent from repository -->
? ? </parent>
? ? <groupId>com.example</groupId>
? ? <artifactId>demo</artifactId>
? ? <version>0.0.1-SNAPSHOT</version>
? ? <packaging>jar</packaging>
? ? <properties>
? ? ? ? <java.version>1.8</java.version>
? ? ? ? <maven.compiler.target>1.8</maven.compiler.target>
? ? ? ? <maven.compiler.source>1.8</maven.compiler.source>
? ? ? ? <!--添加springcloud版本-->
? ? ? ? <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
? ? </properties>
? ? <dependencies>
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? ? <artifactId>spring-boot-starter</artifactId>
? ? ? ? </dependency>
? ? ? ??
? ? ? ? <!--lombok可自動生成getter、setter-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.projectlombok</groupId>
? ? ? ? ? ? <artifactId>lombok</artifactId>
? ? ? ? ? ? <optional>true</optional>
? ? ? ? </dependency>
? ? ? ? <!--feign遠程接口調(diào)用-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.springframework.cloud</groupId>
? ? ? ? ? ? <artifactId>spring-cloud-starter-openfeign</artifactId>
? ? ? ? </dependency>
? ? </dependencies>
? ? <!--管理springcloud版本,引入openfeign時不用添加version-->
? ? <dependencyManagement>
? ? ? ? <dependencies>
? ? ? ? ? ? <dependency>
? ? ? ? ? ? ? ? <groupId>org.springframework.cloud</groupId>
? ? ? ? ? ? ? ? <artifactId>spring-cloud-dependencies</artifactId>
? ? ? ? ? ? ? ? <version>${spring-cloud.version}</version>
? ? ? ? ? ? ? ? <type>pom</type>
? ? ? ? ? ? ? ? <scope>import</scope>
? ? ? ? ? ? </dependency>
? ? ? ? </dependencies>
? ? </dependencyManagement>
? ? <build>
? ? ? ? <plugins>
? ? ? ? ? ? <plugin>
? ? ? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? ? ? ? <artifactId>spring-boot-maven-plugin</artifactId>
? ? ? ? ? ? </plugin>
? ? ? ? </plugins>
? ? </build>
</project>

2.啟動類添加@EnableFeignClients注解

開啟feign

@EnableFeignClients //開啟feign
@SpringBootApplication
public class SpringbootApplication {
?? ?public static void main(String[] args) {
?? ??? ?SpringApplication.run(SpringbootApplication.class, args);
?? ?}
}

3.像平常一樣寫一個service接口

在此基礎(chǔ)上添加一些feign注解

@FeignClient(name = "userService",url = "${ip}:${port}/${base_url}")
public interface UserService {
? ? /**
? ? ?* 根據(jù)條件查詢用戶
? ? ?* @param user查詢參數(shù)
? ? ?* @return 用戶列表
? ? ?*/
? ? @PostMapping("searchUsers")
? ? List<User> searchUsers(@RequestBody User user);
}

在service接口上添加@FeignClient注解,name為springbean的id,用于注入service時使用,url為ip地址

最終調(diào)用的接口地址為url加上@PostMapping的value。

@FeignClient的url可以使用配置文件中的參數(shù)。使用${參數(shù)名}引入即可。

對應的接口:

@RestController("/user")
public class UserController{
? ? @PostMapping("searchUsers")
? ? List<User> searchUsers(@RequestBody User user);
}

由此可見,在使用feign時,service方法的調(diào)用方式(get、post)和參數(shù)、參數(shù)格式、返回值格式需要和對應的接口保持一致

4.調(diào)用接口

@Autowired
private UserService userService;
/**
*查詢18歲的用戶并打印到控制臺
*/
public void printUsers(){
? ?User user = new User();
? ?user.setAge(18);
? ?List<User> userList = userService.searchUsers(user);
? ?System.out.println("userList = " + userList);
}

springboot feign調(diào)用方式比較

1.事發(fā)原因

兩個東家都使用SpringCloud,巴拉巴拉用上了Spring全家桶,從eureka到ribbon,從ribbon到feign,從feign到hystrix,然后在使用feign的時候發(fā)現(xiàn)使用方式不同,仔細一看這種調(diào)用方式,唉,麻煩,我怎么要自己定義DTO,自己定義Fallback, 自己定義方法呢?用上之后,其實發(fā)現(xiàn)各有各的好處,來記錄一下。

2.方式1介紹

我們在開發(fā)服務的時候,會把接口和實現(xiàn)分開, 即有一個API模塊和一個Service模塊,消費者依賴API的jar包,直接注入API中的Service,則可以直接通過Feign調(diào)用到對應的服務,

對應的項目結(jié)構(gòu)如下:

我們在接口API中定義好方法,并加上Feign注解等(MICRO-PROVIDER2是服務名,注冊到Eureka Server上的名稱。

使用Feign還可以自己實現(xiàn)fallback,設(shè)置超時默認放回值。這里做測試,不寫過多代碼。)

具體的實現(xiàn)如下圖所示。

接下來就是我們?nèi)绾卧赾onsumer中去消費這個服務了,我們會在service服務中,依賴api的jar包,實現(xiàn)Provider2Service即可。

具體的實現(xiàn)如下圖

代碼中的實現(xiàn)邏輯:

3.方式2介紹

這中方式介紹起來比較簡單。直接在消費者中定義新的service接口,通過Feign注解,定義方法,調(diào)用的url和被調(diào)用服務的url相同,實現(xiàn)邏輯如下。

4.調(diào)用結(jié)果測試

方式2:

方式1:

可以看到,兩種方式都是可以消費到服務(本質(zhì)是一樣)。但是兩種方式各有好處和壞處,我們要來比較下,看看究竟哪一種才是我們需要的呢?

5.兩種方式對比  

通過兩種方式的對比,我們可以看到的優(yōu)優(yōu)劣勢主要有:

方式一:

 優(yōu)點:

   1:服務消費者不用自己寫接口。

   2:可提供好Dto,Vo等直接給服務消費者。

 缺點:

   1:service需要依賴jar包,如果依賴服務過多,jar也會過多。

   2:給消費者暴露了過多的接口。部分與消費者無關(guān)的接口也暴露給對方。

方式二:

 優(yōu)點:

   1:無需依賴過多jar包。

   2:消費者不要要過多接受消費者提供的方法。

 缺點:

   1:需要消費者自己實現(xiàn)接口。

   2:嚴重依賴文檔。在實現(xiàn)接口時,對于所有信息都要有文檔定義。如:請求方式,請求參數(shù),返回值等。

   3:自己完成Dto,Vo的編寫。  

6.小結(jié)一下

兩種調(diào)用方式,我把知道的優(yōu)缺點放在這了,歡迎大家提出自己的建議。關(guān)于如何選擇,請根據(jù)需要自己抉擇。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java設(shè)置PDF有序和無序列表的知識點總結(jié)

    Java設(shè)置PDF有序和無序列表的知識點總結(jié)

    在本篇文章中小編給大家整理了關(guān)于Java設(shè)置PDF有序和無序列表的知識點,需要的朋友們參考下。
    2019-03-03
  • Spring MVC InitBinder驗證方法

    Spring MVC InitBinder驗證方法

    這篇文章主要介紹了Spring MVC InitBinder驗證方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • java方法重寫和super關(guān)鍵字實例詳解

    java方法重寫和super關(guān)鍵字實例詳解

    這篇文章主要介紹了java方法重寫和super關(guān)鍵字實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • java實現(xiàn)員工工資管理系統(tǒng)

    java實現(xiàn)員工工資管理系統(tǒng)

    這篇文章主要為大家詳細介紹了java實現(xiàn)員工工資管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java中checkbox實現(xiàn)跨頁多選的方法

    Java中checkbox實現(xiàn)跨頁多選的方法

    最近做了一個項目其中遇到這樣的需求,要實現(xiàn)checkbox跨頁多選功能,經(jīng)過小編整理,順利解決,今天小編給大家分享Java中checkbox實現(xiàn)跨頁多選的方法,需要的的朋友參考下
    2017-01-01
  • Java Mail與Apache Mail發(fā)送郵件示例

    Java Mail與Apache Mail發(fā)送郵件示例

    這篇文章主要介紹了Java Mail與Apache Mail發(fā)送郵件示例的相關(guān)資料,需要的朋友可以參考下
    2014-10-10
  • spring mvc中@PathVariable / 帶斜杠方式獲取

    spring mvc中@PathVariable / 帶斜杠方式獲取

    這篇文章主要介紹了spring mvc中@PathVariable / 帶斜杠方式獲取,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • springboot配置文件使用方式

    springboot配置文件使用方式

    文章介紹了將參數(shù)配置在配置文件中的方法,包括使用@Component和@Value注解進行外部配置的屬性注入,以及使用@ConfigurationProperties簡化配置,文章還提供了YAML格式配置文件的語法和特點,并強調(diào)了集中管理和維護配置參數(shù)的重要性
    2024-11-11
  • Spring Boot與Redisson實時排行榜功能

    Spring Boot與Redisson實時排行榜功能

    排行榜功能是常見且重要的需求之一,本文主要介紹了Spring Boot與Redisson實時排行榜功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-05-05
  • SpringBoot整合ES解析搜索返回字段問題

    SpringBoot整合ES解析搜索返回字段問題

    這篇文章主要介紹了SpringBoot整合ES解析搜索返回字段問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03

最新評論