rocketmq源碼解析默認請求處理器①

說在前面apache

默認請求處理器,查詢數據版本微信

 

源碼解析this

進入這個方法,查詢數據版本,org.apache.rocketmq.namesrv.processor.DefaultRequestProcessor#queryBrokerTopicConfigcode



public RemotingCommand queryBrokerTopicConfig(ChannelHandlerContext ctx,RemotingCommand request) throws RemotingCommandException {final RemotingCommand response = RemotingCommand.createResponseCommand(QueryDataVersionResponseHeader.class);final QueryDataVersionResponseHeader responseHeader = (QueryDataVersionResponseHeader) response.readCustomHeader();final QueryDataVersionRequestHeader requestHeader =(QueryDataVersionRequestHeader) request.decodeCommandCustomHeader(QueryDataVersionRequestHeader.class);DataVersion dataVersion = DataVersion.decode(request.getBody(), DataVersion.class);//       broker topic配置是否改變=》Boolean changed = this.namesrvController.getRouteInfoManager().isBrokerTopicConfigChanged(requestHeader.getBrokerAddr(), dataVersion);if (!changed) {//            更新broker配置的最後更新時間=》this.namesrvController.getRouteInfoManager().updateBrokerInfoUpdateTimestamp(requestHeader.getBrokerAddr());}//        查詢namesrv的數據版本=》DataVersion nameSeverDataVersion = this.namesrvController.getRouteInfoManager().queryBrokerTopicConfig(requestHeader.getBrokerAddr());response.setCode(ResponseCode.SUCCESS);response.setRemark(null);if (nameSeverDataVersion != null) {response.setBody(nameSeverDataVersion.encode());}responseHeader.setChanged(changed);return response;    }

進入這個方法,roker topic配置是否改變,org.apache.rocketmq.namesrv.routeinfo.RouteInfoManager#isBrokerTopicConfigChangedblog

public boolean isBrokerTopicConfigChanged(final String brokerAddr, final DataVersion dataVersion) {//        查詢broker的topic配置版本=》DataVersion prev = queryBrokerTopicConfig(brokerAddr);return null == prev || !prev.equals(dataVersion);    }

進入這個方法,查詢broker的topic配置版本,org.apache.rocketmq.namesrv.routeinfo.RouteInfoManager#isBrokerTopicConfigChangedget

public boolean isBrokerTopicConfigChanged(final String brokerAddr, final DataVersion dataVersion) {//        查詢broker的topic配置版本=》DataVersion prev = queryBrokerTopicConfig(brokerAddr);return null == prev || !prev.equals(dataVersion);    }

往上返回到這個方法,更新broker配置的最後更新時間,org.apache.rocketmq.namesrv.routeinfo.RouteInfoManager#updateBrokerInfoUpdateTimestamp源碼

public void updateBrokerInfoUpdateTimestamp(final String brokerAddr) {BrokerLiveInfo prev = this.brokerLiveTable.get(brokerAddr);if (prev != null) {prev.setLastUpdateTimestamp(System.currentTimeMillis());}    }

往上返回到這個方法,查詢namesrv的數據版本,org.apache.rocketmq.namesrv.routeinfo.RouteInfoManager#queryBrokerTopicConfigio

public DataVersion queryBrokerTopicConfig(final String brokerAddr) {BrokerLiveInfo prev = this.brokerLiveTable.get(brokerAddr);if (prev != null) {return prev.getDataVersion();}return null;    }

往上返回到這個方法,org.apache.rocketmq.namesrv.processor.DefaultRequestProcessor#queryBrokerTopicConfig結束。ast

 

說在最後class

本次解析僅表明我的觀點,僅供參考。

 

加入技術微信羣

釘釘技術羣

相關文章
相關標籤/搜索