ImadcnIdentifierGenerator 依然存在主键重复的情况
Closed this issue · 3 comments
`@Configuration
@EnableConfigurationProperties(IdProperties.class)
public class IdAutoConfigure {
@Autowired
private IdProperties properties;
@Bean
public IdentifierGenerator getIdentifierGenerator(){
return new ImadcnIdentifierGenerator(properties.getZookeeperAddr()+":"+properties.getPort());
}
}
@test
public void test() {
while(true) {
UmsUser user = new UmsUser();
user.setEmail("xxx@qq.com");
user.setNickname("lisi");
long start = System.currentTimeMillis();
mapper.insert(user);
long end = System.currentTimeMillis();
System.out.println(end - start);
} `
注册时,系统会依赖本地节点缓存的信息,可以在你截图上看到,默认 /tmp/idworker/default.cache。当一个应用在同一路径启用多个实例,会“共享”的读取同一缓存,workerId会分配为同一值,导致id“重复”。
see
欢迎提供PR来新增feature
缓存配置默认 /tmp/idworker/default.cache。当一个应用在同一路径启用多个实例,会“共享”的读取同一缓存,workerId会分配为同一值,导致id“重复”。
我目前是修改了配置路径,各个应用都有自己独立的路径,但是各个应用启动后依然 workerId 都为 0 ,所以依然会有重复问题。
如果每个应用是独立的group name,那么idworker的nodeid会独立计算
如果想要不同应用,共享同一id生成算法,请配置相同的group name,
参考配置文档 中,group 说明
https://github.com/imadcn/idworker#idworkergenerator--id生成策略配置
https://github.com/imadcn/idworker#generatorsnowflake--生成策略--snowflake模式