成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

微服務架構下Feign和Dubbo的性能大比拼,到底鹿死誰手?

開發 前端
總的來說,基于SpringCloudAlibaba框架下,Feign和Dubbo各有千秋。選擇使用哪一個組件取決于具體的項目需求和團隊技術棧。對于需要快速構建微服務架構的項目,Feign是一個不錯的選擇;而對于需要更多自定義和服務治理功能的項目,Dubbo可能更適合。在實際應用中,也可以根據具體場景將兩者結合使用,以達到更好的效果。

概述

隨著微服務架構的普及,服務間的通信和調用成為了關鍵問題。在SpringCloudAlibaba框架下,Feign和Dubbo是兩種常用的服務調用組件。本文將對兩者進行性能對比及區別分析。

一、Feign與Dubbo概述

Feign是一個聲明式的Web服務客戶端,使得編寫HTTP客戶端變得更簡單。通過簡單的注解,Feign將自動生成HTTP請求,使得服務調用更加便捷。而Dubbo是一個高性能、輕量級的Java RPC框架,提供了豐富的服務治理功能。

二、性能對比

  1. 調用性能:在單次調用方面,Feign的性能表現略遜于Dubbo。由于Feign的自動生成HTTP請求機制,其性能相較于Dubbo的直接RPC調用會有一定的損失。然而,對于大多數應用而言,這種性能差異并不明顯。
  2. 負載均衡:Feign和Dubbo都提供了負載均衡功能。Feign使用Ribbon作為其負載均衡組件,而Dubbo則內置了負載均衡機制。在負載均衡方面,Dubbo提供了更多的配置選項和策略,具有更強的靈活性。
  3. 服務發現:Feign依賴于Eureka、Consul、Nacos等注冊中心實現服務發現,而Dubbo則提供了內置的服務發現機制。在服務發現的性能和穩定性方面,Dubbo具有一定的優勢。

三、區別分析

  1. 架構差異:Feign基于SpringCloud體系,更適用于微服務架構。而Dubbo則獨立于任何框架,具有更強的通用性。
  2. 適用場景:對于簡單的服務調用場景,Feign更加簡潔易用。而當需要復雜的服務治理功能時,Dubbo則更具優勢。
  3. 擴展性:Feign提供了豐富的注解和配置選項,可以輕松地與SpringCloud的其他組件集成。而Dubbo則提供了豐富的SPI機制,使得擴展更加靈活。
  4. 社區活躍度:Feign的社區相對活躍,隨著SpringCloud的發展,Feign也在不斷迭代和完善。Dubbo的社區雖然活躍度不如Feign,但憑借其多年的積累和沉淀,依然擁有大量的用戶和穩定的支持者。

四、實戰性能對比

引入SpringCloud的pom集成dubbo

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.7</version>
    <relativePath/> 
</parent>
<properties>
        <spring.boot.version>2.7.7</spring.boot.version>
        <alibaba.cloud.version>2021.0.4.0</alibaba.cloud.version>
        <spring.cloud.version>2021.0.5</spring.cloud.version>
</properties>
<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>${alibaba.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
</dependencyManagement>

創建公共API模塊

public interface HelloService {
    void sayHello(Long timme);
}

創建服務生產者

<dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>3.2.7</version>
        </dependency>
        <dependency>
            <groupId>com.tiger</groupId>
            <artifactId>tiger-example-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

配置application.yml

### 服務端口號
server:
  port: 9800
#### nacos 注冊中心地址
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848  
  #### 服務名
  application:
    name: tiger-producer  
dubbo:
  application:
    # 關閉qos端口避免單機多生產者端口沖突 如需使用自行開啟
    qos-enable: false
  registry:
    address: nacos://127.0.0.1:8848?username=nacos&password=nacos
    group: DEFAULT_GROUP
  protocol:
    # 如需使用 Triple 3.0 新協議 可查看官方文檔
    # 使用 dubbo 協議通信
    name: dubbo
    # dubbo 協議端口(-1表示自增端口,從20880開始)
    port: -1


  # 消費者相關配置
  consumer:
    # 超時時間
    timeout: 3000
  scan:
    # 接口實現類掃描
    base-packages: com.tiger.**.dubbo

業務代碼

@Service
@Slf4j
@DubboService
public class HelloServiceImpl implements HelloService {
    @Override
    public void sayHello(Long time) {
        long startTime = System.currentTimeMillis();
        long elapsed = time - startTime;
        log.info("dubbo rpc 調用耗時 {}",elapsed);
    }
}

創建Application啟動器

@EnableDubbo
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class ProducerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProducerApplication.class);
    }
}

創建服務消費者

<dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>3.2.7</version>
        </dependency>
        <dependency>
            <groupId>com.tiger</groupId>
            <artifactId>tiger-example-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

配置application.yml

### 服務端口號
server:
  port: 9400
#### nacos 注冊中心地址
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848  
  #### 服務名
  application:
    name: tiger-consumer  
dubbo:
  application:
    # 關閉qos端口避免單機多生產者端口沖突 如需使用自行開啟
    qos-enable: false
  registry:
    address: nacos://127.0.0.1:8848?username=nacos&password=nacos
    group: DEFAULT_GROUP
  protocol:
    # 如需使用 Triple 3.0 新協議 可查看官方文檔
    # 使用 dubbo 協議通信
    name: dubbo
    # dubbo 協議端口(-1表示自增端口,從20880開始)
    port: -1
  # 消費者相關配置
  consumer:
    # 超時時間
    timeout: 3000
  scan:
    # 接口實現類掃描
    base-packages: com.tiger.**.dubbo

創建消費者調用代碼

@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/consumer/remoteTest")
public class RemoteController {


    @DubboReference
    private final HelloService helloService;


    private final ProducerFeign producerFeign;




    @GetMapping("dubboTest")
    public ResponseResult<?> dubboTest(){
        helloService.sayHello(System.currentTimeMillis());
        return ResponseResult.success();
    }


    @GetMapping("feignTest")
    public ResponseResult<?> feignTest(){
        producerFeign.sayHello(System.currentTimeMillis());
        return ResponseResult.success();
    }




}

創建Feign調用用于對比性能測試

@FeignClient("tiger-producer")
public interface ProducerFeign {


    @GetMapping("/producer/remoteTest/testFeign")
    void sayHello(@RequestParam Long time);


}

創建應用啟動類

@EnableDubbo
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class);
    }


}

進行測試

http://localhost:9400/consumer/remoteTest/dubboTest
http://localhost:9400/consumer/remoteTest/feignTest

圖片圖片

從調用時間上可見 Dubbo的性能確實比Feign的性能好上不少

總結

總的來說,基于SpringCloudAlibaba框架下,Feign和Dubbo各有千秋。選擇使用哪一個組件取決于具體的項目需求和團隊技術棧。對于需要快速構建微服務架構的項目,Feign是一個不錯的選擇;而對于需要更多自定義和服務治理功能的項目,Dubbo可能更適合。在實際應用中,也可以根據具體場景將兩者結合使用,以達到更好的效果。

責任編輯:武曉燕 來源: HELLO程序員
相關推薦

2020-08-04 17:06:40

Merging Rebasing Git

2009-12-01 08:47:41

2010-05-28 11:09:51

SVN功能

2018-10-25 14:08:07

KubernetesGoogle

2009-09-22 09:59:05

服務器售后服務

2011-03-04 15:22:37

ADSLLAN

2009-07-02 18:50:43

2011-01-19 11:10:30

2010-03-18 14:54:46

主流無線技術

2012-06-18 09:49:11

虛擬化

2011-03-08 10:55:00

亞馬遜谷歌微軟

2009-02-06 14:26:37

UbuntuVistaWindows7

2010-07-14 13:38:51

Perl開發工具

2010-05-24 18:15:34

SVN中Branch和

2017-09-10 14:29:03

眼力

2010-09-08 15:41:28

SIP協議棧

2011-11-08 10:29:44

2010-08-25 16:12:34

職場

2014-01-07 17:08:02

Java開源框架

2023-05-26 15:53:48

MidjourneyAI圖像
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费观看一级毛片视频 | 极品销魂美女一区二区 | 天堂在线1 | 人操人免费视频 | 国产精品五月天 | 亚洲一区国产精品 | 日韩精品免费在线 | 日韩不卡一区二区 | 一级片在线免费播放 | 亚洲国产欧美国产综合一区 | 国产网站在线免费观看 | 久草视频在线播放 | 欧美一区二区精品 | www狠狠干| 日韩中文字幕一区 | 中文字幕1区 | 国产美女特级嫩嫩嫩bbb片 | 香蕉视频黄色 | 国产在线精品一区 | 国产成人精品a视频一区www | 亚洲精品片 | av福利网站| 秋霞性生活| 亚洲精品美女 | 久久国内精品 | 日韩电影a | 伊人中文字幕 | 欧美激情综合五月色丁香小说 | 欧美精品在欧美一区二区少妇 | 国产美女一区 | www.色.com| 欧美国产日韩在线观看成人 | 91亚洲国产成人久久精品网站 | 国产亚洲成av人片在线观看桃 | 一区二区三区精品在线视频 | 国产电影精品久久 | 日本成人中文字幕 | 日韩三片| 久久久久久久久久久久久9999 | 久久精品色欧美aⅴ一区二区 | 99精品欧美一区二区蜜桃免费 |