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

Springboot整合Dubbo+Nacos實現(xiàn)RPC調(diào)用的示例代碼

 更新時間:2024年02月19日 09:45:38   作者:牽著貓散步的鼠鼠  
隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,越來越多的企業(yè)和開發(fā)者開始關(guān)注微服務架構(gòu),Nacos是阿里巴巴開源的一個動態(tài)服務發(fā)現(xiàn)、配置管理和服務管理平臺,本文講解如何將Spring Boot與Dubbo和Nacos整合,實現(xiàn)RPC調(diào)用,需要的朋友可以參考下

前言

隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,越來越多的企業(yè)和開發(fā)者開始關(guān)注微服務架構(gòu)。微服務架構(gòu)可以將一個大型的應用拆分成多個獨立、可擴展、可維護的小型服務,每個服務負責實現(xiàn)應用的一部分功能。這種架構(gòu)方式可以提高開發(fā)效率,降低系統(tǒng)復雜度,方便團隊協(xié)作,同時也有利于資源的合理利用和彈性伸縮。

在微服務架構(gòu)中,服務之間的通信是一個關(guān)鍵問題。傳統(tǒng)的HTTP通信方式在高并發(fā)、高性能的場景下存在性能瓶頸,因此,越來越多的開發(fā)者開始采用RPC(遠程過程調(diào)用)技術(shù)來實現(xiàn)服務之間的通信。Dubbo是一款高性能、輕量級的開源Java RPC框架,它提供了豐富的服務治理功能,如服務注冊、服務發(fā)現(xiàn)、負載均衡、容錯等,被廣泛應用于微服務架構(gòu)中。

Nacos是阿里巴巴開源的一個動態(tài)服務發(fā)現(xiàn)、配置管理和服務管理平臺,它支持基于DNS和基于RPC的服務發(fā)現(xiàn),具有跨語言、跨平臺、靈活擴展的特點。網(wǎng)上很多都是Springcloud整合Dubbo,本文講解如何將Spring Boot與Dubbo和Nacos整合,實現(xiàn)RPC調(diào)用。

快速上手

在實現(xiàn)DubboRPC服務調(diào)用時,我們首先需要一個服務注冊中心,常用的服務注冊中心有Zookeeper,Nacos等,我們這里采用Nacos,沒有部署Nacos的請先自行教程部署,這里不細講

創(chuàng)建示例項目

我們這里創(chuàng)建兩個名為ProviderDemo和ConsumerDemo的項目

導入依賴

整合nacos和dubbo主要需要nacos-client和dubbo這兩項依賴

        <!--這里對應的Springboot版本為2.7.6-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>3.0.9</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>2.1.0</version>
        </dependency>

ProviderDemo的maven配置信息如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.luckysj</groupId>
    <artifactId>ProviderDemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>ProviderDemo</name>
    <description>ProviderDemo</description>
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.7.6</spring-boot.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>3.0.9</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>2.1.0</version>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
 
 
</project>

ConsumerDemo的配置信息如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.luckysj</groupId>
    <artifactId>ConsumerDemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>ConsumerDemo</name>
    <description>ConsumerDemo</description>
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.7.6</spring-boot.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>3.0.9</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>2.1.0</version>
        </dependency>
 
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
 
</project>

編寫配置

consumerDemo項目的配置如下,注意把nacos信息更改為自己的

server:
  port: 7777
 
dubbo:
  application:
    #設置應用的名稱
    name: dubbo-springboot-consumer
    #qos監(jiān)控服務是否啟動
    qos-enable: true
    #qos監(jiān)控服務端口
    qos-port: 23456
    qos-accept-foreign-ip: false
 
  #指定使用Dubbo協(xié)議,且端口設置為-1,表示隨機分配可用端口
  protocol:
    name: dubbo
    port: -1
  registry:
    #配置注冊中心為Nacos
    id: nacos-registry
    address: nacos://nacos服務的ip:nacos服務的端口
    username: nacos賬戶
    password: nacos密碼
    parameters:
      namespace: f74484c1-02d8-4322-a50c-630bc814fe54   #nacos命名空間
    group: dubbo-demo    #nacos分組
  config-center:
    timeout: 40000 #設置服務超時時間

providerDemo項目的配置如下

server:
  port: 6666
dubbo:
  application:
    #設置應用的名稱
    name: dubbo-springboot-provider
    qos-enable: true
    qos-port: 23444
    qos-accept-foreign-ip: false
  #指定使用Dubbo協(xié)議,且端口設置為-1,表示隨機分配可用端口
  protocol:
    name: dubbo
    port: -1
  registry:
    #配置注冊中心為Nacos
    id: nacos-registry
    address: nacos://ip:端口
    username: 賬戶
    password: 密碼
    parameters:
      namespace: f74484c1-02d8-4322-a50c-630bc814fe54   #nacos命名空間
    group: dubbo-demo    #nacos分組
  config-center:
    timeout: 40000 #設置服務超時時間

添加啟動類注解

我們要使用Dubbo服務的話需要在服務啟動類上編寫@EnableDubbo注解(提供者項目和消費者項目都需要)

編寫服務接口與服務實現(xiàn)類

我們在Provider項目中provider包下新建服務接口與實現(xiàn)類

PrintService接口內(nèi)容如下

public interface PrintService {
    public void print(String str);
}

PrintServiceImpl接口內(nèi)容如下,我們通過@DubboService注解暴露該服務,

@DubboService
public class PrintServiceImpl implements PrintService {
 
    @Override
    public void print(String str) {
        System.out.println("dubbo調(diào)用打印信息為" + str);
    }
}

在服務消費方項目中也定義相同的接口

public interface PrintService {
    public void print(String str);
}

特別注意這里調(diào)用者與提供者的服務接口需要有相同的包路徑,否則無法找到對應服務,我們后續(xù)通過引入一個common項目來解決這個問題

在服務消費方項目編寫一個測試接口,使用@DubboReference注解聲明引用的服務

@RestController
@RequestMapping("/demo")
public class DemoController {
    @DubboReference //聲明服務引用
    private PrintService printService;
 
    @GetMapping("/test")
    public void testDubbo(String str){
        System.out.println("consumer開始RPC調(diào)用provider服務");
        printService.print(str);
    }
}

訪問接口,測試兩項目之間的服務調(diào)用,可以看到我們ConsumerDemo項目通過Dubbo成功的調(diào)用了ProviderDemo項目

http://localhost:7777/demo/test?str=111

引入common項目

我們上面可以發(fā)現(xiàn)提供者和消費者的服務接口必須在相同的包路徑下,十分的不優(yōu)雅,故我們可以新建一個common項目,在這個項目中定義雙方服務調(diào)用的接口,相當于定義了一種規(guī)范,兩邊都采用common中的服務接口,這樣就不會因為包路徑不同導致dubbo找不到對應服務

新建common項目

打包該項目到本地(云)倉庫中,在消費者和提供者項目中引入該項目

雙方都使用common包內(nèi)的服務接口

測試接口,運行正常,結(jié)束

總結(jié)

Dubbo是一個基于Java的RPC (遠程過程調(diào)用)框架,比OpenFeign支持更多的通訊協(xié)議,且性能更高,更加適應于大規(guī)模的分布式項目中。

以上就是Springboot整合Dubbo+Nacos實現(xiàn)RPC調(diào)用的示例代碼的詳細內(nèi)容,更多關(guān)于Springboot實現(xiàn)RPC調(diào)用的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot @Scope與@RefreshScope注解使用詳解

    SpringBoot @Scope與@RefreshScope注解使用詳解

    spring的bean管理中,每個bean都有對應的scope。在BeanDefinition中就已經(jīng)指定scope,默認的RootBeanDefinition的scope是prototype類型,使用@ComponentScan掃描出的BeanDefinition會指定是singleton,最常使用的也是singleton
    2022-11-11
  • 解析ConcurrentHashMap: 紅黑樹的代理類(TreeBin)

    解析ConcurrentHashMap: 紅黑樹的代理類(TreeBin)

    ConcurrentHashMap是由Segment數(shù)組結(jié)構(gòu)和HashEntry數(shù)組結(jié)構(gòu)組成。Segment的結(jié)構(gòu)和HashMap類似,是一種數(shù)組和鏈表結(jié)構(gòu),今天給大家普及java面試常見問題---ConcurrentHashMap知識,一起看看吧
    2021-06-06
  • java中jdk代理和cglib代理使用步驟詳解

    java中jdk代理和cglib代理使用步驟詳解

    這篇文章主要給大家介紹了關(guān)于java中jdk代理和cglib代理使用步驟的相關(guān)資料,JDK代理和CGLIB是Java中兩種常見的代理實現(xiàn)方式,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • Jdk11使用HttpClient提交Http2請求的實現(xiàn)方法

    Jdk11使用HttpClient提交Http2請求的實現(xiàn)方法

    這篇文章主要介紹了Jdk11使用HttpClient提交Http2請求的實現(xiàn)方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • Spring Boot Web 開發(fā)注解篇

    Spring Boot Web 開發(fā)注解篇

    在 Spring Boot 快速入門中,只要在 pom.xml 加入了 spring-boot-starter-web 依賴,即可快速開發(fā) web 應用。下文給大家詳細介紹了spring boot web 開發(fā)注解,感興趣的朋友參考下吧
    2017-08-08
  • idea中g(shù)it如何刪除commit提交的log信息

    idea中g(shù)it如何刪除commit提交的log信息

    這篇文章主要介紹了idea中g(shù)it如何刪除commit提交的log信息問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 使用JPA雙向多對多關(guān)聯(lián)關(guān)系@ManyToMany

    使用JPA雙向多對多關(guān)聯(lián)關(guān)系@ManyToMany

    這篇文章主要介紹了使用JPA雙向多對多關(guān)聯(lián)關(guān)系@ManyToMany,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • java實現(xiàn)簡單的搜索引擎

    java實現(xiàn)簡單的搜索引擎

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單的搜索引擎的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • Java Spring 聲明式事務詳解

    Java Spring 聲明式事務詳解

    這篇文章主要介紹了spring 聲明式事務實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-09-09
  • Java中String類常用類型實例總結(jié)

    Java中String類常用類型實例總結(jié)

    在我們開發(fā)中經(jīng)常會用到很多的常用的工具類,這里做一個總結(jié),下面這篇文章主要給大家介紹了關(guān)于Java中String類常用類型的相關(guān)資料,String類代表字符串,需要的朋友可以參考下
    2021-12-12

最新評論

台湾省| 铁力市| 保康县| 嘉鱼县| 丁青县| 蛟河市| 靖安县| 淄博市| 宿州市| 濉溪县| 五大连池市| 盐边县| 廉江市| 郧西县| 永善县| 尉氏县| 庆城县| 自贡市| 南溪县| 普兰店市| 南郑县| 玛纳斯县| 靖西县| 迁西县| 武清区| 永昌县| 嘉鱼县| 顺昌县| 屏南县| 娱乐| 福建省| 申扎县| 额济纳旗| 宜兰市| 富源县| 巴林右旗| 新津县| 叶城县| 金昌市| 长葛市| 钟祥市|