最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ā)非?;A(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)文章

最新評論

阜新市| 镇宁| 渑池县| 北宁市| 邵阳市| 尉氏县| 桐乡市| 黑水县| 贵德县| 葫芦岛市| 平遥县| 白水县| 常熟市| 桑日县| 隆尧县| 绥芬河市| 仙居县| 永城市| 屏南县| 阳东县| 浠水县| 莱芜市| 乌兰浩特市| 房山区| 习水县| 江门市| 临沂市| 永善县| 资源县| 会昌县| 鹿泉市| 花莲县| 长寿区| 临泉县| 民丰县| 信阳市| 东城区| 秦安县| 阿荣旗| 通城县| 获嘉县|