說在前面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
本次解析僅表明我的觀點,僅供參考。
加入技術微信羣
釘釘技術羣