欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一. 概要

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

二. Feign簡(jiǎn)介

1. 概念

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

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

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

2. 功能

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

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

三. 服務(wù)提供者

1. 添加依賴

首先我們?cè)诟窹OM文件中添加核心依賴如下:

<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. 啟動(dòng)類(lèi)

項(xiàng)目的啟動(dòng)類(lèi)代碼如下:

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

4. 控制層

我們可以編寫(xiě)一個(gè)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

這里再定義一個(gè)pojo實(shí)體類(lèi)。

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

四. 服務(wù)消費(fèi)者

1. 添加依賴

消費(fèi)者服務(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. 配置文件

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

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

3. 啟動(dòng)類(lèi)

消費(fèi)者服務(wù)的啟動(dòng)類(lèi)代碼。

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

這里也需要定義一個(gè)POJO類(lèi),代碼同上,此處略過(guò)。

4. Feign服務(wù)

此處我們需要定義一個(gè)Feign接口類(lèi)。

@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. 控制層

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

@RestController
@RequestMapping("/feign")
public class FeignController {
    @Resource
    UserFeignService userFeignService;
    /**
     *  傳遞復(fù)雜的對(duì)象 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);
    }
}

代碼編寫(xiě)完畢后,我們需要將服務(wù)提供者和服務(wù)消費(fèi)者兩個(gè)項(xiàng)目都啟動(dòng)起來(lái),然后進(jìn)行測(cè)試。

五. 測(cè)試

1. 測(cè)試get請(qǐng)求

2. 測(cè)試post請(qǐng)求json數(shù)據(jù)格式

3. 測(cè)試頭部中包含信息

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

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

相關(guān)文章

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

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

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

    springboot對(duì)壓縮請(qǐng)求的處理方法

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

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

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

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

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

    springboot接入mq的方法示例

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

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

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

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

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

    Java報(bào)錯(cuò):UnsupportedOperationException in Collection

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

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

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

    springboot2.0集成rabbitmq的示例代碼

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

最新評(píng)論