SpringCloud(一) - Dubbo + Zookeeper

来源:https://www.cnblogs.com/xiaoqigui/archive/2022/10/25/16825486.html
-Advertisement-
Play Games

Dubbo 和Zookeeper 不是SpringCloud的東西,放在這裡只是為了方便複習; 1、下載安裝Zookeeper和Dubbo 1.1 下載安裝教程 下載安裝教程 windows環境下安裝zookeeper教程詳解(單機版) 1.2 啟動頁面 1.2.1 zkServer.xmd zoo ...


Dubbo 和Zookeeper 不是SpringCloud的東西,放在這裡只是為了方便複習;

1、下載安裝Zookeeper和Dubbo

1.1 下載安裝教程

下載安裝教程 windows環境下安裝zookeeper教程詳解(單機版)

1.2 啟動頁面

1.2.1 zkServer.xmd zookeeper 服務端

1.2.2 zkCli.cmd zookeeper 客戶端

1.3.3 運行 double-admin

java-jar dubbo-admin-0.0.1-SNAPSHOT.jar

訪問localhost:7001

2、SpringBoot 集成 dubbo + zookeeper

2.1 模塊項目建立

2.1.1 主項目

2.1.1.1 pom.xml
<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.kgc.sbt</groupId>
    <artifactId>springboot-10-dubbo-96</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-10-dubbo-96</name>
    <!-- 主項目打包方式,pom方式 -->
    <packaging>pom</packaging>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <!-- 版本統一管理 -->
        <dubbo.version>0.1.0</dubbo.version>
        <zkclient.version>0.10</zkclient.version>
    </properties>

    <!-- 父項目中的 dependencyManagement 中定義的只是依賴的聲明,並不實現引入,因此子項目需要顯式的聲明需要用的依賴 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.kgc.sbt</groupId>
                <artifactId>contactmall96-common</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>

            <dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>${dubbo.version}</version>
            </dependency>

            <dependency>
                <groupId>com.101tec</groupId>
                <artifactId>zkclient</artifactId>
                <version>${zkclient.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

	<!-- 模塊管理  -->
    <modules>
        <module>contactmall96-common</module>
        <module>contactmall96-server</module>
        <module>contactmall96-web</module>
    </modules>
    
    <!-- 不需要 build -->

</project>

2.1.2 公共模塊 common模塊

2.1.2.1 pom.xml
<?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>
    <parent>
        <groupId>com.kgc.sbt</groupId>
        <artifactId>springboot-10-dubbo-96</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml </relativePath>
    </parent>
    <groupId>com.kgc.sbt</groupId>
    <artifactId>contactmall96-common</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>contactmall96-common</name>
    <!-- 普通jar包,不是可執行jar,用於提供公共jar,給其他模塊提供依賴 -->
    <packaging>jar</packaging>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

    <!-- 不需要 build -->
    
</project>
2.1.2.2 公共Api介面
// 聯繫人 公共介面(基於dubbo的rpc遠程介面服務調用),
// 此介面是提供給消費端web調用獲取數據
// 服務端server實現此介面,提供數據
public interface ContactApi {

    //根據聯繫人編號,查詢聯繫人詳情公共方法
    ContactVO queryContactById(Integer id);

}

2.1.2.3 其他公共資源

註意:視圖層的實體一定要進行序列化,因為在網路上傳輸的對象需要序列化;(ContactVO implements Serializable)

2.1.3 服務提供者 server模塊

2.1.3.1 pom.xml
<?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>
    <parent>
        <groupId>com.kgc.sbt</groupId>
        <artifactId>springboot-10-dubbo-96</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml </relativePath>
    </parent>
    <groupId>com.kgc.sbt</groupId>
    <artifactId>contactmall96-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--   依賴了common 模塊,跨域直接使用模塊中的依賴和類     -->
        <dependency>
            <groupId>com.kgc.sbt</groupId>
            <artifactId>contactmall96-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <!-- fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>

        <!-- mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>

        <!-- commons-lang -->
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>

        <!-- mybatis-plus-boot-starter -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3.4</version>
        </dependency>

        <!-- 父項目中管理了版本的不需要指定版本 -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
2.1.3.2 dubbo配置
# 埠
server.port=8096

#數據源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/kh96_springboot_contactdb?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
spring.datasource.username=root
spring.datasource.password=root

#mybatis-plus 配置
mybatis-plus.configuration.map-underscore-to-camel-case=true

# dubbo配置
dubbo.application.name=contact-provider
dubbo.registry.address=127.0.0.1:2181
dubbo.registry.protocol=zookeeper
#埠號-1,會自動從20880開始遞增,也可以指定(必須確保不衝突,一般不建議)(不要寫成 dubbo.registry.port=-1)註冊埠
#協議埠
dubbo.protocol.port=-1  
#掃描指定包下的服務
dubbo.scan.base-packages=com.kgc.sbt.provider
2.1.3.3 代碼分佈情況

註意:主啟動類掃描包,@MapperScan("com.kgc.sbt.mapper")

2.1.3.4 公共Api介面的實現類(註冊服務)
package com.kgc.sbt.provider;

import com.alibaba.dubbo.config.annotation.Service;  //@Service作用:將當前服務註冊為服務提供者
import com.kgc.sbt.api.ContactApi;
import com.kgc.sbt.service.ContactService;
import com.kgc.sbt.vo.ContactVO;
import org.springframework.beans.factory.annotation.Autowired;

//聯繫人功能 的提供者
@Service  //是alibaba包下的,不是spring的業務組件註解,作用:將當前服務註冊為服務提供者
public class ContactProvider implements ContactApi {

    @Autowired
    private ContactService contactService;

    @Override
    public ContactVO queryContactById(Integer id) {
        //調用業務介面,查詢聯繫人的詳情
        return contactService.getContactById(id);
    }


}

2.1.4 消費模塊 web模塊

2.1.4.1 pom.xml

跟服務提供者差不多,這裡列出所有pom主要是因為第一次這樣構建模塊項目,所以記錄一下細節。

<?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>
    <parent>
        <groupId>com.kgc.sbt</groupId>
        <artifactId>springboot-10-dubbo-96</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml </relativePath>
    </parent>
    <groupId>com.kgc.sbt</groupId>
    <artifactId>contactmall96-web</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>contactmall96-web</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.kgc.sbt</groupId>
            <artifactId>contactmall96-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
2.1.4.2 dubbo配置
# 埠
server.port=8098

# dubbo 配置
dubbo.application.name=contact-consumer
dubbo.registry.address=127.0.0.1:2181
dubbo.registry.protocol=zookeeper

2.1.4.3 代碼分佈情況

2.1.4.4 獲取公共Api的實現類(訂閱服務)
import com.alibaba.dubbo.config.annotation.Reference; //作用,到註冊中心訂閱當前介面對象提供的服務,成為該介面的消費者
import com.kgc.sbt.api.ContactApi;
import com.kgc.sbt.vo.ContactVO;
import org.springframework.stereotype.Service;

@Service  //spring容器的業務註解
public class ContactServiceImpl implements com.kgc.sbt.service.ContactService {

    @Reference //alibaba下的,作用,到註冊中心訂閱當前介面對象提供的服務,成為該介面的消費者
    private ContactApi contactApi;

    @Override
    public ContactVO getContactById(Integer contactId) {
        //基於RPC遠程介面調用,調用服務提供者提供的服務,就等價於調用此既可,只不過是遠程
        return contactApi.queryContactById(contactId);
    }
}

2.2 測試

先啟動zookeeper和dubbo-admin;

在啟動服務提供模塊和服務消費模塊;

2.2.1 請求測試

2.2.1.1 dubbo-admin頁面查看 提供者和消費者

提供者:

消費者:

2.2.1.2 請求測試

2.2.2 多提供者,多消費者測試

2.2.2.1 複製服務

2.2.2.2 dubbo 查看 提供者和消費者

提供者:

消費者:

2.2.2.3 兩個消費者請求測試

2.2.3 一些重要的點

2.2.3.1提供者的 權重

2.2.3.2 消費者的禁止
2.2.3.2.1 設置 消費者禁止:

被禁止的客戶端將收到訪問禁止異常

2.2.3.2.1 測試訪問:

2.2.3.3 消費者的屏蔽
2.2.3.3.1 設置 消費者屏蔽:

屏蔽後,將不發起遠程調用,直接在客戶端返回空對象。

2.2.3.3.2 測試訪問:

2.2.3.4 負載均衡

負載均衡有:隨機(預設),輪詢,最少併發。





您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 Class類文件結構 Class文件:是一組以8個位元組為基礎單位的二進位流,當需要存儲空間超過8位元組時,會按照高位在前的方式分割【大端法】成若幹個8個位元組進行存儲 魔數:頭4個位元組,固定值為:0xCAFEBABE 版本號:魔數的後繼4個位元組,第5和第6個位元組是次版本號,第7和第8個位元組是主版本號 ...
  • 認證源碼分析 位置 : APIVIew 》dispatch方法 》self.initial(request, *args, **kwargs) >有認證,許可權,頻率三個版塊 分析: 只讀認證源碼: self.perform_authentication(request) 》 self.perform ...
  • 🌸 前言 嗨嘍~大家好呀,這裡是魔王吶 ! 半世櫻花無礙,緣來過往再生。 在我們看動漫的時候,總少不了被一些唯美的場景所吸引 請添加圖片描述 其中,就有不少櫻花的場景,雖然,現在不能線上下看櫻花~ 但是,我還是能用代碼畫畫來解解饞的(難不倒我) 🌸 婆娑紅塵苦,櫻花自綻放 ❀ 一期一會的絢爛·櫻 ...
  • 記錄一個老PHP項目中遇到的還能記得的坑,後面要是還有興趣研究研究PHP的話,或者又有哪些坑,就都記一記,有些東西真的是不去整就不知道,改起來雖然不難,但是找起來卻不容易啊。┗|`O′|┛ 嗷~~ ...
  • 大家都用過鬧鐘,鬧鐘可以說是一種定時任務。比如我們設定了周一到周五早上7點半的時間響鈴,那麼鬧鐘就會在周一到周五的早上7點半進行響鈴,這種就是定時的任務。 ...
  • [BigDecimal精確度的計數保留法及精度丟失的解決辦法] BigDecimal精確度的計數保留法 在銀行、帳戶、計費等領域,BigDecimal提供了精確的數值計算。其中8種舍入方式值得掌握。 1、ROUND_UP 舍入遠離零的舍入模式。 在丟棄非零部分之前始終增加數字(始終對非零捨棄部分前面 ...
  • [優美的Java代碼之try...catch] 概述 通常我們使用try...catch()捕獲異常時,如果遇到類似IO流的處理,要在finally部分關閉IO流。這是JDK1.7之前的寫法了; 在JDK7以後,可以使用優化後的try-with-resource語句,該語句確保了每個資源,在語句結束 ...
  • 摘要:當你使用java實現一個線程同步的對象時,一定會包含一個問題:你該如何保證多個線程訪問該對象時,正確地進行阻塞等待,正確地被喚醒? 本文分享自華為雲社區《JUC中的AQS底層詳細超詳解,剖析AQS設計中所需要考慮的各種問題!》,作者: breakDawn 。 java中AQS究竟是做什麼的? ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...