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

Java遠程調(diào)用組件Feign技術(shù)使用詳解

 更新時間:2022年11月25日 10:29:49   作者:一一哥Sun  
Feign是Netflix公司開發(fā)的一個聲明式的REST調(diào)用客戶端; Ribbon負載均衡、 Hystrⅸ服務(wù)熔斷是我們Spring Cloud中進行微服務(wù)開發(fā)非常基礎(chǔ)的組件,在使用的過程中我們也發(fā)現(xiàn)它們一般都是同時出現(xiàn)的,而且配置也都非常相似

一. 概要

我們知道,現(xiàn)在最火且最有技術(shù)含量的技術(shù)莫過于SpringCloud微服務(wù)了,所以今天壹哥就帶大家來學(xué)習(xí)一下微服務(wù)的核心的組件之一,F(xiàn)eign的基本使用及其工作機制。

二. Feign簡介

1. 概念

在學(xué)習(xí)Feign的使用之前,我們先來了解一下什么是Feign。

Feign是Netflix開發(fā)的聲明式(目前由Spring在維護)、模板化的HTTP客戶端, Feign可以幫助我們更快捷、優(yōu)雅地調(diào)用HTTP Api。

簡單地來說,F(xiàn)eign就是一個用于遠程調(diào)用服務(wù)的框架/工具,讓開發(fā)者可以更少耦合、更少代碼、更加快,也更兼容的方法進行遠程服務(wù)調(diào)用。

2. 功能

  • Feign可插拔的注解支持,包括Feign注解和JAX-RS注解;
  • Feign與Ribbon負載均衡器、Hystrix或Sentinel熔斷器無縫集成;
  • Feign支持可插拔的HTTP編碼器和解碼器;
  • Feign支持HTTP請求和響應(yīng)的壓縮等。

了解了這些基本概念之后,接下來壹哥就帶大家看看Feign組件是如何實現(xiàn)遠程接口調(diào)用的。廢話少說,我們直接上代碼。

三. 服務(wù)提供者

1. 添加依賴

首先我們在父POM文件中添加核心依賴如下:

<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>
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-alibaba-dependencies</artifactId>
      <version>${spring-cloud-alibaba-dependencies.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

然后在子POM文件添加依賴如下:

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2. 配置文件

application.yml文件中添加如下配置:

server:
  port: 8090
spring:
  application:
    name: nacos-feign-example
  cloud:
    nacos:
      discovery:
        server-addr: 112.74.42.138:8848

3. 啟動類

項目的啟動類代碼如下:

@SpringBootApplication
public class NetflixFeignProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(NetflixFeignProviderApplication.class, args);
    }
}

4. 控制層

我們可以編寫一個Controller控制器,將Web接口定義如下。

@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
    /**
     * 模擬主鍵自增
     */
    private AtomicInteger pk = new AtomicInteger();
    @PostMappingpublic User save(@RequestBody User user) {
        user.setUid(pk.incrementAndGet());
        return user;
    }
    /**
     * @param uid
     * @return
     */@GetMapping("/{uid}")
    public User user(@PathVariable("uid") int uid) {
        return User.builder()
                .uid(uid)
                .username("admin")
                .password("123456")
                .build();
    }
    @GetMapping("/users")
    public List<User> users(@RequestHeader("token") String token) {
        // 模擬從數(shù)據(jù)中獲取數(shù)據(jù)
        ArrayList<User> users = new ArrayList<>();
        for (int i = 1; i <= 10; i++) {
            users.add(User.builder()
                    .uid(i)
                    .username(token + i)
                    .password("123456")
                    .build());
        }
        return users;
    }
    @DeleteMapping()
    public int delete(int uid) {
        log.info("刪除用戶: {} 成功", uid);
        return 1;
    }
}

5. POJO

這里再定義一個pojo實體類。

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User implements Serializable {
    private Integer uid;
    private String username;
    private String password;
}

四. 服務(wù)消費者

1. 添加依賴

消費者服務(wù)的核心依賴如下:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2. 配置文件

消費者服務(wù)的application.yml配置文件如下:

server:
  port: 8091
spring:
  cloud:
    nacos:
      discovery: 
        server-addr: 你的注冊中心IP:8848
      application:
        name: feign-example-01

3. 啟動類

消費者服務(wù)的啟動類代碼。

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

這里也需要定義一個POJO類,代碼同上,此處略過。

4. Feign服務(wù)

此處我們需要定義一個Feign接口類。

@FeignClient(value = "test-feign-provider", path = "/user")
public interface UserFeignService {
    @PostMapping("/")
    User save(@RequestBody User user);
    @GetMapping("/{uid}")
    User detail(@PathVariable("uid") int uid);
    @DeleteMappingUser delete(@RequestParam int uid);
    @GetMapping("/users")
    List<User> users(@RequestHeader("token") String token);
}

5. 控制層

然后我們也需要在消費者服務(wù)中定義一個Controller接口。

@RestController
@RequestMapping("/feign")
public class FeignController {
    @Resource
    UserFeignService userFeignService;
    /**
     *  傳遞復(fù)雜的對象 json格式
     * 127.0.0.1:8091/feign/register
     */@PostMapping("/register")
    public User register(@RequestBody User user) {
        return userFeignService.save(user);
    }
    /**
     * 127.0.0.1:8091/feign/1
     */@GetMapping("/{uid}")
    public User detail(@PathVariable int uid) {
        return userFeignService.detail(uid);
    }
    /**
     * 127.0.0.1:8091/feign/users
     * 
     */@GetMapping("/users")
    public List<User> users(@RequestHeader String token) {
        return userFeignService.users(token);
    }
}

代碼編寫完畢后,我們需要將服務(wù)提供者和服務(wù)消費者兩個項目都啟動起來,然后進行測試。

五. 測試

1. 測試get請求

2. 測試post請求json數(shù)據(jù)格式

3. 測試頭部中包含信息

通過測試我們就可以發(fā)現(xiàn),測試我們已經(jīng)實現(xiàn)了在服務(wù)消費者中原創(chuàng)調(diào)用服務(wù)提供者里的接口,從而實現(xiàn)了接口的遠程調(diào)用。

到此這篇關(guān)于Java遠程調(diào)用組件Feign技術(shù)使用詳解的文章就介紹到這了,更多相關(guān)Java Feign內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • jackson序列化和反序列化的應(yīng)用實踐指南

    jackson序列化和反序列化的應(yīng)用實踐指南

    這篇文章主要給大家介紹了關(guān)于jackson序列化和反序列化的應(yīng)用實踐指南,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • springboot對壓縮請求的處理方法

    springboot對壓縮請求的處理方法

    這篇文章主要介紹了springboot對壓縮請求的處理,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • springboot集成普羅米修斯(Prometheus)的方法

    springboot集成普羅米修斯(Prometheus)的方法

    這篇文章主要介紹了springboot集成普羅米修斯(Prometheus)的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • mall整合SpringSecurity及JWT實現(xiàn)認證授權(quán)實戰(zhàn)

    mall整合SpringSecurity及JWT實現(xiàn)認證授權(quán)實戰(zhàn)

    這篇文章主要為大家介紹了mall整合SpringSecurity及JWT實現(xiàn)認證授權(quán)實戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • springboot接入mq的方法示例

    springboot接入mq的方法示例

    本文主要介紹了springboot接入mq的方法示例,主要實現(xiàn)配置以及實現(xiàn)一個簡單的發(fā)送、接收消息的例子,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • 在springboot文件中如何創(chuàng)建mapper.xml文件

    在springboot文件中如何創(chuàng)建mapper.xml文件

    這篇文章主要介紹了在springboot文件中如何創(chuàng)建mapper.xml文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 一文理清什么是BIO以及如何使用

    一文理清什么是BIO以及如何使用

    這篇文章主要介紹了什么是BIO以及如何使用,BIO英文全名是blockingIO,也叫做阻塞IO,是最容易理解、最容易實現(xiàn)的IO工作方式,本文就來通過一些簡單的示例為大家講講BIO吧,需要的朋友可以參考下
    2023-10-10
  • Java報錯:UnsupportedOperationException in Collections的解決方案

    Java報錯:UnsupportedOperationException in Collection

    在Java編程中,UnsupportedOperationException是一種常見的運行時異常,通常在試圖對不支持的操作執(zhí)行修改時發(fā)生,它表示當前操作不被支持,本文將深入探討UnsupportedOperationException的產(chǎn)生原因,并提供具體的解決方案和最佳實踐,需要的朋友可以參考下
    2024-06-06
  • Java中使用數(shù)組實現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)實例

    Java中使用數(shù)組實現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)實例

    這篇文章主要介紹了Java中使用數(shù)組實現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)實例,本文先是講解了實現(xiàn)棧至少應(yīng)該包括以下幾個方法等知識,然后給出代碼實例,需要的朋友可以參考下
    2015-01-01
  • springboot2.0集成rabbitmq的示例代碼

    springboot2.0集成rabbitmq的示例代碼

    這篇文章主要介紹了springboot2.0集成rabbitmq的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12

最新評論