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

RocketMQ中的NameServer詳細(xì)解析

 更新時間:2024年01月03日 10:39:22   作者:潛水路人甲  
這篇文章主要介紹了RocketMQ中的NameServer詳細(xì)解析,NameServer是一個非常簡單的Topic路由注冊中心,支持Broker的動態(tài)注冊與發(fā)現(xiàn),因此不能保證NameServer的一致性,需要的朋友可以參考下

前言

NameServer是一個非常簡單的Topic路由注冊中心,支持Broker的動態(tài)注冊與發(fā)現(xiàn)。

Producer和Conumser通過NameServer可以知道整個Broker集群的路由信息,從而進(jìn)行消息的投遞和消費(fèi)。

NameServer各實(shí)例間相互不進(jìn)行信息通訊,因此不能保證NameServer的一致性(Consistency),可以保證可用性(Availability)。

即選擇了CAP中的AP。NameServer只能保證最終一致性,關(guān)于怎么保證最終一致性后文再講。

現(xiàn)在先從NameServer的啟動開始。

NameServer為namesrv模塊

NamesrvStartup

public static NamesrvController main0(String[] args) {
//構(gòu)造NamesrvController 
            NamesrvController controller = createNamesrvController(args);
            start(controller);
            return controller;
}
    public static NamesrvController start(final NamesrvController controller) throws Exception {
//初始化
        boolean initResult = controller.initialize();
//啟動
        controller.start();
        return controller;
    }
 

NamesrvStartup作為NameServer的啟動類,主要做了三件事:

  • 構(gòu)造NamesrvController(NameServer控制器)
  • 加載初始化,由NamesrvController負(fù)責(zé)
  • 啟動remotingServer,開啟Netty服務(wù)

NamesrvController

public class NamesrvController {
    private static final InternalLogger log = InternalLoggerFactory.getLogger(LoggerName.NAMESRV_LOGGER_NAME);
 
    //nameSrv的配置
    private final NamesrvConfig namesrvConfig;
    //netty的配置
    private final NettyServerConfig nettyServerConfig;
 
    //執(zhí)行單線程的任務(wù)調(diào)度,自定義編程名稱
    private final ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(new ThreadFactoryImpl(
        "NSScheduledThread"));
 
    //kv的配置管理
    private final KVConfigManager kvConfigManager;
 
    //路由管理器,有broker的ip和隊列信息,producer發(fā)送的queue信息,consumer的pull的queue信息
    private final RouteInfoManager routeInfoManager;
 
    //namesrv的netty的服務(wù)端實(shí)現(xiàn)
    private RemotingServer remotingServer;
 
    //處理接受到請求事件的回調(diào)監(jiān)聽服務(wù),主要處理netty的事件
    private BrokerHousekeepingService brokerHousekeepingService;
 
    private ExecutorService remotingExecutor;
 
    private Configuration configuration;
    private FileWatchService fileWatchService;
 
    public NamesrvController(NamesrvConfig namesrvConfig, NettyServerConfig nettyServerConfig) {
        this.namesrvConfig = namesrvConfig;
        this.nettyServerConfig = nettyServerConfig;
        //構(gòu)造kv配置的管理
        this.kvConfigManager = new KVConfigManager(this);
        //構(gòu)造路由信息管理
        this.routeInfoManager = new RouteInfoManager();
        //構(gòu)造網(wǎng)絡(luò)連接事件管理
        this.brokerHousekeepingService = new BrokerHousekeepingService(this);
        //配置
        this.configuration = new Configuration(
            log,
            this.namesrvConfig, this.nettyServerConfig
        );
        this.configuration.setStorePathFromConfig(this.namesrvConfig, "configStorePath");
    }

NamesrvController作為一個控制器主要負(fù)責(zé)NettyServer的創(chuàng)建,注冊requestProcessor,啟動NettyServer及各種task

    public boolean initialize() {
 
        //加載kv配置
        this.kvConfigManager.load();
        //初始化NettyServer
        this.remotingServer = new NettyRemotingServer(this.nettyServerConfig, this.brokerHousekeepingService);
        //執(zhí)行器,用于接受請求并進(jìn)行處理
        this.remotingExecutor =
            Executors.newFixedThreadPool(nettyServerConfig.getServerWorkerThreads(), new ThreadFactoryImpl("RemotingExecutorThread_"));
        //注冊Netty的處理器,即remotingExecutor
        this.registerProcessor();
        //進(jìn)行掃描未活躍的Broker的任務(wù)
        this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
 
            @Override
            public void run() {
                NamesrvController.this.routeInfoManager.scanNotActiveBroker();
            }
        }, 5, 10, TimeUnit.SECONDS);
        
        this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
 
            @Override
            public void run() {
                NamesrvController.this.kvConfigManager.printAllPeriodically();
            }
        }, 1, 10, TimeUnit.MINUTES);
        //...省略其他代碼
        return true;
    }
 
   
    private void registerProcessor() {
        if (namesrvConfig.isClusterTest()) {
            this.remotingServer.registerDefaultProcessor(new ClusterTestRequestProcessor(this, namesrvConfig.getProductEnvName()),
                this.remotingExecutor);
        } else {
            //注冊request處理器
            this.remotingServer.registerDefaultProcessor(new DefaultRequestProcessor(this), this.remotingExecutor);
        }
    }  
  
 
    public void start() throws Exception {
        //啟動netty server
        this.remotingServer.start();
 
        if (this.fileWatchService != null) {
            this.fileWatchService.start();
        }
    }

NettyRequestProcessor

NettyRequestProcessor為請求處理器,上一步注冊的處理器,一般使用默認(rèn)的處理器DefaultRequestProcessor,processRequest方法處理請求。

@Override
    public RemotingCommand processRequest(ChannelHandlerContext ctx,
        RemotingCommand request) throws RemotingCommandException {
        //...
        switch (request.getCode()) {
            case RequestCode.PUT_KV_CONFIG:
                return this.putKVConfig(ctx, request);
            case RequestCode.GET_KV_CONFIG:
                return this.getKVConfig(ctx, request);
            case RequestCode.DELETE_KV_CONFIG:
                return this.deleteKVConfig(ctx, request);
            case RequestCode.QUERY_DATA_VERSION:
                return queryBrokerTopicConfig(ctx, request);
            case RequestCode.REGISTER_BROKER:
                Version brokerVersion = MQVersion.value2Version(request.getVersion());
                if (brokerVersion.ordinal() >= MQVersion.Version.V3_0_11.ordinal()) {
                    return this.registerBrokerWithFilterServer(ctx, request);
                } else {
                    return this.registerBroker(ctx, request);
                }
            //...省略其他代碼
        }
        return null;
    }

到此這篇關(guān)于RocketMQ中的NameServer詳細(xì)解析的文章就介紹到這了,更多相關(guān)RocketMQ中的NameServer內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入理解@component與@Configuration注解

    深入理解@component與@Configuration注解

    這篇文章主要介紹了深入理解@component與@Configuration注解,從Spring3.0,@Configuration用于定義配置類,可替換xml配置文件,被注解的類內(nèi)部包含有一個或多個被@Bean注解的方法,這些方法將會被掃描,并用于構(gòu)建bean定義,初始化Spring容器,需要的朋友可以參考下
    2023-11-11
  • Java編程實(shí)現(xiàn)游戲中的簡單碰撞檢測功能示例

    Java編程實(shí)現(xiàn)游戲中的簡單碰撞檢測功能示例

    這篇文章主要介紹了Java編程中的簡單碰撞檢測功能,涉及java針對坐標(biāo)點(diǎn)的相關(guān)數(shù)學(xué)運(yùn)算操作技巧,需要的朋友可以參考下
    2017-10-10
  • Java Maven依賴傳遞,可選依賴,排除依賴詳解

    Java Maven依賴傳遞,可選依賴,排除依賴詳解

    這篇文章主要介紹了Java Maven依賴傳遞,可選依賴,排除依賴詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • 詳解SpringBoot讀取Yml配置文件的3種方法

    詳解SpringBoot讀取Yml配置文件的3種方法

    本文主要介紹了詳解SpringBoot讀取Yml配置文件的3種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • hadoop是什么語言

    hadoop是什么語言

    Hadoop是一個由Apache基金會所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu)。 用戶可以在不了解分布式底層細(xì)節(jié)的情況下,開發(fā)分布式程序。充分利用集群的威力進(jìn)行高速運(yùn)算和存儲
    2017-09-09
  • 剖析SpringCloud Feign中所隱藏的坑

    剖析SpringCloud Feign中所隱藏的坑

    這篇文章主要為大家介紹了剖析SpringCloud Feign中所隱藏的坑示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • JAVA遍歷Map集合的幾種方法匯總

    JAVA遍歷Map集合的幾種方法匯總

    這篇文章主要給大家介紹了關(guān)于JAVA遍歷Map集合的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 簡單記事本java源碼實(shí)例

    簡單記事本java源碼實(shí)例

    這篇文章主要介紹了簡單記事本java源碼,以一個完整的實(shí)例形式分析了記事本的Java實(shí)現(xiàn)方法,對于Java應(yīng)用程序的開發(fā)有一定的參考借鑒價值,需要的朋友可以參考下
    2014-11-11
  • 基于Java 數(shù)組內(nèi)存分配的相關(guān)問題

    基于Java 數(shù)組內(nèi)存分配的相關(guān)問題

    本篇文章是對Java中數(shù)組內(nèi)存分配進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • ScheduledExecutorService任務(wù)定時代碼示例

    ScheduledExecutorService任務(wù)定時代碼示例

    這篇文章主要介紹了ScheduledExecutorService任務(wù)定時代碼示例,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01

最新評論

弥勒县| 赤峰市| 汉源县| 泗阳县| 长顺县| 莱芜市| 中宁县| 浙江省| 石嘴山市| 林甸县| 海口市| 渑池县| 阳春市| 丹巴县| 巫溪县| 微山县| 亳州市| 威信县| 玛纳斯县| 永平县| 信丰县| 抚宁县| 晋江市| 新乡市| 新泰市| 元江| 霸州市| 高平市| 松滋市| 左权县| 河间市| 格尔木市| 金川县| 乌海市| 易门县| 东安县| 沐川县| 呼伦贝尔市| 涿州市| 涿鹿县| 如皋市|