亚洲乱码中文字幕综合,中国熟女仑乱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的文章,但都不能用。在通過學(xué)習(xí)、開發(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ù)名}引入即可。

對應(yīng)的接口:

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

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

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ā)服務(wù)的時候,會把接口和實現(xiàn)分開, 即有一個API模塊和一個Service模塊,消費者依賴API的jar包,直接注入API中的Service,則可以直接通過Feign調(diào)用到對應(yīng)的服務(wù),

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

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

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

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

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

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

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

3.方式2介紹

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

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

方式2:

方式1:

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

5.兩種方式對比  

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

方式一:

 優(yōu)點:

   1:服務(wù)消費者不用自己寫接口。

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

 缺點:

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

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

方式二:

 優(yōu)點:

   1:無需依賴過多jar包。

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

 缺點:

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

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

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

6.小結(jié)一下

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

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

相關(guān)文章

  • SpringCloud如何利用Feign訪問外部http請求

    SpringCloud如何利用Feign訪問外部http請求

    這篇文章主要介紹了SpringCloud如何利用Feign訪問外部http請求,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • JAVA技術(shù)實現(xiàn)上傳下載文件到FTP服務(wù)器(完整)

    JAVA技術(shù)實現(xiàn)上傳下載文件到FTP服務(wù)器(完整)

    這篇文章主要介紹了JAVA技術(shù)實現(xiàn)上傳下載文件到FTP服務(wù)器(完整),本文使用 Apache Jakarta Commons Net(commons-net-3.3.jar) 基于FileZilla Server服務(wù)器實現(xiàn)FTP服務(wù)器上文件的上傳/下載/刪除等操作,需要的朋友可以參考下
    2015-07-07
  • java組件commons-fileupload實現(xiàn)文件上傳

    java組件commons-fileupload實現(xiàn)文件上傳

    這篇文章主要介紹了java借助commons-fileupload組件實現(xiàn)文件上傳,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Spring使用event-stream進行數(shù)據(jù)推送

    Spring使用event-stream進行數(shù)據(jù)推送

    這篇文章主要介紹了Spring使用event-stream進行數(shù)據(jù)推送,前端使用EventSource方式向后臺發(fā)送請求,后端接收到之后使用event-stream方式流式返回,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-03-03
  • java中斷機制實例講解

    java中斷機制實例講解

    這篇文章主要介紹了java中斷機制實例講解,用了風(fēng)趣幽默的講法,有對這方面不太懂的同學(xué)可以研究下
    2021-01-01
  • 關(guān)于Java數(shù)組聲明、創(chuàng)建、初始化的相關(guān)介紹

    關(guān)于Java數(shù)組聲明、創(chuàng)建、初始化的相關(guān)介紹

    這篇文章主要是關(guān)于Java數(shù)組聲明、創(chuàng)建、初始化的相關(guān)介紹,并給出其對應(yīng)的代碼,需要的朋友可以參考下
    2015-08-08
  • Spring?boot?運用策略模式實現(xiàn)避免多次使用if的操作代碼

    Spring?boot?運用策略模式實現(xiàn)避免多次使用if的操作代碼

    這篇文章主要介紹了Spring?boot?運用策略模式實現(xiàn),避免多次使用if,使用策略模式后,新加一種支付策略時,只需要在策略枚舉中添加新加的策略信息,外加一個策略類即可,而不再需要添加新的if判斷,需要的朋友可以參考下
    2022-08-08
  • springboot+redis分布式鎖實現(xiàn)模擬搶單

    springboot+redis分布式鎖實現(xiàn)模擬搶單

    這篇文章主要介紹了springboot+redis分布式鎖實現(xiàn)模擬搶單,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • Java基礎(chǔ)知識之StringWriter流的使用

    Java基礎(chǔ)知識之StringWriter流的使用

    這篇文章主要介紹了Java基礎(chǔ)知識之StringWriter流的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringBoot中Dozer的使用小結(jié)

    SpringBoot中Dozer的使用小結(jié)

    dozer是用來兩個對象之間屬性轉(zhuǎn)換的工具,有了這個工具之后,我們將一個對象的所有屬性值轉(zhuǎn)給另一個對象時,就不需要再去寫重復(fù)的set和get方法了,下面介紹下SpringBoot中Dozer的使用,感興趣的朋友一起看看吧
    2022-03-03

最新評論