RocketMq源码解析 (四)RemotingUtil工具类
在前面的MixAll 分析完毕后,回到BrokerConfig 结果下一个就是新的工具类
private String namesrvAddr = System.getProperty(MixAll.NAMESRV_ADDR_PROPERTY,System.getenv(MixAll.NAMESRV_ADDR_ENV));
@ImportantField
private String brokerIP1 = RemotingUtil.getLocalAddress();
再大的系统也是一步步构建起来的,所以为了了解整个系统还是要每一步都了解,这次我们就来分析RemotingUtil 一般来说Util结尾的都是工具类,remote是远程的意思,所以里面必不可少的用到了网络编程的一些知识。
确定操作系统平台
/**
* 获取操作系统
*/
public static final String OS_NAME=System.getProperty("os.name");
public static final Logger log = LoggerFactory.getLogger(RemotingHelper.ROCKETMQ_REMOTING);
private static boolean isLinuxPlatform=false;
private static boolean isWindowsPlatform=false;
static {
if(OS_NAME!=null&&OS_NAME.toLowerCase().contains("linux")){
isLinuxPlatform=true;
}
if(OS_NAME!=null&&OS_NAME.toLowerCase().contains("windows")){
isWindowsPlatform=true;
}
}
public static boolean isLinuxPlatform(){
return isLinuxPlatform;
}
public static boolean isWindowsPlatform(){
return isWindowsPlatform;
}
确定操作平台能够确保网络编程的正确性,因为linux和windows在某些方面是不一样的。
创建多路复用器
/**
* 创建多路复用器
* @return Selector
* @throws IOException
*/
public static Selector openSelector()throws IOException{
Selector selector=null;
if(isLinuxPlatform()){
try{
final Class<?>providerClazz =Class.forName("sun.nio.ch.EPollSelectorProvider");
if (providerClazz!=null