Dubbo註冊中心配置及性能調優技巧

一、Zookeeper作為Dubbo註冊中心

1、Zookeeper概述


// Zookeeper客戶端代碼示例
public class ZookeeperClient {
    public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
        ZooKeeper zooKeeper = new ZooKeeper("localhost:2181", 5000, new Watcher() {
            @Override
            public void process(WatchedEvent watchedEvent) {
                System.out.println("Zookeeper連接狀態:"+watchedEvent.getState());
            }
        });
        String path = "/dubbo/provider/demoService/user1";
        // 查看節點數據
        byte[] data = zooKeeper.getData(path, false, null);
        System.out.println("節點數據:"+new String(data));

        // 創建節點
        String createPath = "/dubbo/provider/demoService/user2";
        String createData = "user2-data";
        Stat stat = zooKeeper.exists(createPath, false);
        if (stat == null) {// 節點不存在
            zooKeeper.create(createPath, createData.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        }
        // 查看節點下的子節點
        List children = zooKeeper.getChildren("/dubbo/provider/demoService", false);
        for (String child : children) {
            System.out.println("子節點路徑:"+child);
        }
        // 更新節點數據
        String updatePath = "/dubbo/provider/demoService/user2";
        String updateData = "user2-data-update";
        zooKeeper.setData(updatePath,updateData.getBytes(),-1);

        zooKeeper.close();
    }
}

(1)使用自己的Zookeeper或使用阿里雲等Zookeeper服務提供商都可以。
(2)建立Dubbo配置zookeeper.properties文件
假設你的Zookeeper地址是:127.0.0.1:2181(如果你在本地部署測試版本則不需要修改),加入如下配置:


dubbo.registry.address=zookeeper://127.0.0.1:2181

(3)注意,Dubbo啟動時需要讀取上述dubbo.properties文件。
(4)查看Dubbo是否能夠正常連上Zookeeper註冊中心。


package com.demo.provider;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Provider {

    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"provider.xml"});
        context.start();
        System.in.read(); // 按任意鍵退出
    }
}

(5)Dubbo控制日誌級別
控制Dubbo控制台日誌級別,比如輸出INFO級別日誌:
在logback.xml(日誌配置文件)中加入以下代碼(目標屬性是console ):



二、如何正確的指定Dubbo服務端口號

1、Dubbo服務端口號
Dubbo服務端口號默認是20880,但是實際用於生產的應用很難只使用一個端口號,因為它需要承載很多Dubbo服務,因此為了標識不同的服務,需要為每個服務指定獨立的端口號以便進行區分,配置方法如下:
  (1)在Dubbo服務接口實現中指定服務端口號。


// demo服務提供者實現類
@Service(version = "1.0.0")
public class DemoServiceImpl implements DemoService {

    @Override
    @ServiceMethod(group = "user")
    public String sayHello(String name) {
        System.out.println("Dubbo 服務端口為:" + RpcContext.getContext().getLocalAddress().getPort());
        return "Hello " + name;
    }
}
//Dubbo 服務端口為:20882

從上述代碼中可以看出,在Dubbo服務實現類中指定服務接口方法的具體端口號。

  (2)在Dubbo服務提供端xml文件中配置服務端口。








    

從上述xml文件中可以看出,在Dubbo服務提供端xml文件中指定服務協議及端口號。

三、Dubbo服務端性能調優的解決方案

1、選擇合適的序列化方案
在Dubbo遠程調用時,Java對象需要進行序列化和反序列化,從而進行網絡傳輸。Dubbo支持多種不同的序列化方案,如Hessian、Kyro、Java自身的序列化等,選擇合適的序列化方案可以有效的提高Dubbo性能。
2、調整線程池大小
Dubbo提供了一組可配置的線程池來調整線程池大小,通常線程池中線程數需要根據CPU個數來進行設置。




3、自定義協議
在Dubbo的負載均衡中,每次進行網絡傳輸時,會先序列化、反序列化,在進行心跳檢查等操作,這種額外的性能消耗可以通過自定義協議進行規避,Dubbo中以Fastjson作為默認序列化方案。




四、Dubbo註冊中心高可用方案

1、Zookeeper集群
Zookeeper集群是保證Dubbo註冊中心高可用的最常用方案。如果Dubbo註冊中心只依賴單一的Zookeeper節點,則會使得整個Dubbo系統服務掛掉,因此,建議搭建Zookeeper集群。




通過上述Zookeeper集群的配置,Dubbo可以進行輪詢來選擇其中一個Zookeeper節點進行註冊。

2、Redis集群
Dubbo可以將註冊中心作為緩存來使用,將所有已註冊的服務名及服務URL存入Redis中,在服務消費請求服務URL時,首先會在Redis緩存中尋找相應服務名稱,如果發現則直接返回對應的服務URL,否則從Zookeeper的服務發現中心中查找。此時,Redis集群體系可以讓整個Dubbo系統具備高可用性。




通過上述Redis集群的配置,Dubbo可以將Zookeeper作為服務發現到緩存中,通過Redis集群體系讓整個系統具備高可用性。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/276003.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-17 19:38
下一篇 2024-12-17 19:38

相關推薦

  • 使用vscode建立UML圖的實踐和技巧

    本文將重點介紹在使用vscode在軟件開發中如何建立UML圖,並且給出操作交互和技巧的指導。 一、概述 在軟件開發中,UML圖是必不可少的重要工具之一。它為軟件架構和各種設計模式的…

    編程 2025-04-29
  • ArcGIS更改標註位置為中心的方法

    本篇文章將從多個方面詳細闡述如何在ArcGIS中更改標註位置為中心。讓我們一步步來看。 一、禁止標註智能調整 在ArcMap中設置標註智能調整可以自動將標註位置調整到最佳顯示位置。…

    編程 2025-04-29
  • CPU爆滿怎麼解決 Java為中心

    在Java編程中,難免會遇到CPU佔用過高的情況,接下來從多個方面介紹如何解決CPU爆滿問題。 一、優化代碼 1、減少循環次數。循環體內不要放太多邏輯判斷和計算,可以把計算提取出來…

    編程 2025-04-29
  • CMD如何升級為中心?

    本文將詳細介紹在Windows操作系統下如何將CMD升級為中心,以及如何在升級後使用CMD中心進行操作。 一、下載Windows Terminal Windows Terminal…

    編程 2025-04-29
  • 如何優化 Git 性能和重構

    本文將提供一些有用的提示和技巧來優化 Git 性能並重構代碼。Git 是一個非常流行的版本控制系統,但是在處理大型代碼倉庫時可能會有一些性能問題。如果你正在處理這樣的問題,本文將會…

    編程 2025-04-29
  • 如何使用GPU加速運行Python程序——以CSDN為中心

    GPU的強大性能是眾所周知的。而隨着深度學習和機器學習的發展,越來越多的Python開發者將GPU應用於深度學習模型的訓練過程中,提高了模型訓練效率。在本文中,我們將介紹如何使用G…

    編程 2025-04-29
  • 如何修改ant組件的動效為中心

    當我們使用Ant Design時,其默認的組件動效可能不一定符合我們的需求,這時我們需要修改Ant Design組件動效,使其更加符合我們的UI設計。本文將從多個方面詳細闡述如何修…

    編程 2025-04-29
  • 黑夜不迷途打一中藥名為中心

    中藥作為中華民族獨有的藥物療法,已經歷了千百年的歷史,在中醫中發揮着重要的作用。其中有一種藥物,以「黑夜不迷途」為謎底,是一種著名的中藥。下面將從藥物的組成、功效、用法等方面,進行…

    編程 2025-04-29
  • 優秀周記1000字的撰寫思路與技巧

    優秀周記是每個編程開發工程師記錄自己工作生活的最佳方式之一。本篇文章將從周記的重要性、撰寫思路、撰寫技巧以及周記的示例代碼等角度進行闡述。 一、周記的重要性 作為一名編程開發工程師…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28

發表回復

登錄後才能評論