当前使用版本(必填,否则不予处理)
3.4.1
该问题是如何引起的?(确定最新版也有问题再提!!!)
设备:macbook pro 2019 Sequence在获取datacenterId时,因为获取网卡时获取到的是lo0导致拿不到mac地址,从而导致datacenterId为0,结果可能会出现id重复。
重现步骤(如果有就写完整)
有2种情况会出现拿不到mac地址: 1. 多次测试时随机出现拿到的网卡是lo0,所以拿不到mac地址。 2. 断网的情况下运行,拿到的网卡必定是lo0,这种情况必定拿不到mac地址。
报错信息
InetAddress ip = InetAddress.getLocalHost(); NetworkInterface network = NetworkInterface.getByInetAddress(ip); byte[] mac = network.getHardwareAddress(); 该方法获取mac地址有问题,需要优化,有概率拿到lo0,从而拿不到mac地址,最终导致id重复,怀疑这个批量插入,主键冲突 #3289issues就是这个问题导致的。
Comment From: miemieYaho
怎么优化?
Comment From: zjxclzyb
怎么优化?
参考一下这个:https://www.cnblogs.com/kira2will/p/8419049.html 或者https://blog.csdn.net/cdnight/article/details/86741265
Comment From: huayanYu
@zjxclzyb 期待你的PR~,参与进来
Comment From: qmdx
同一台机器部署多个实例,建议考虑设置为不同的 dataCenterId
public DefaultIdentifierGenerator(long workerId, long dataCenterId) {
this.sequence = new Sequence(workerId, dataCenterId);
}