1 定义
在apache rocketmq 的官方文档中, 暂时没有找到相关对instanceName的相关说明.
在使用RocketMQ的过程中,大家 对instanceName或多或少都会有一些印象,只是大家在使用的时候并没有过多的注意到这个属性.
2 初探
- 重要的类: ClientConfig, MQClientInstance,MQClientManager
在上述截图中,我们发现如果我们没有设置instanceName,那么系统也会给一个默认值DEFAULT.
我们先重点看一下ClientConfig里有哪些重要的方法,以及各版本见的差异.
/*
* 把instanceName 变更成pid, 4.9.0 及以上版本
* 如果我们没有设置instanceName字段,那么instanceName就会被设置成进程ID+当前时间戳
*/
public void changeInstanceNameToPID(){
if (this.instanceName.equals("DEFAULT")) {
this.instanceName = UtilAll.getPid() + "#" + System.nanoTime();
}
}
/*
* 把instanceName 变更成pid, 4.9.0 以下版本
* 如果我们没有设置instanceName字段,那么instanceName就会被设置成进程ID
*/
public void changeInstanceNameToPID(){
if (this.instanceName.equals("DEFAULT")) {
this.instanceName = String.valueOf(UtilAll.getPid());
}
}
在这里,为什么从4.9.0版本开始,要加上当前时间戳呢? 加这个是为了解决什么问题呢? 这个留到后续我们再说.
我们再看另一个重要的方法. ClientConfig类里的
/**
* 构建mqClientId clientIp+ instanceName + unitName
* 如果用不到RocketMq Streams, 其实
*/
public String buildMQClientId() {
StringBuilder sb = new StringBuilder();
sb.append(this.getClientIP());
sb.append("@");
sb.append(this.getInstanceName());
if (!UtilAll.isBlank(this.unitName)) {
sb.append("@");
sb.append(this.unitName);
}
return sb.toString();
}
上面介绍的这些关键的类以及代码片段,是为了下一章的内容做铺垫.