參考鏈接:
記一次線上 Snowflake 算法 id 重複事件覆盤_idutil.getsnowflake-CSDN博客
Snowflake生成器單機模擬時間回退導致id重複 · Issue #1206 · dromara/hutool (github.com)
一、問題描述
使用版本:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.6.3</version>
</dependency>
獲取id具體代碼:
public class SnowflakeUtils {
/**
* 生成Snowflake id
*/
public static String createNo() {
Snowflake snowflake = new Snowflake(1, 1);
return snowflake.nextIdStr();
}
}
問題:高併發時重複。具體表現爲jmeter設置10秒內發送200個請求時,偶發性會產生1~2個重複id,500個時,固定會有一場,1000個併發時,大約2%重複
解決方法:
1)單例模式獲取雪花算法實例
2)升級到叫新版本(對於我的版本其實不用,但是最好升級一下)
改造後的pom和java:
pom:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.25</version>
</dependency>
java:
public class SnowflakeUtils {
/**
* 生成Snowflake id
*/
public static String createNo() {
Snowflake snowflake = IdUtil.getSnowflake(1, 1);//單例方式獲取實例,否則高併發會重複!!!
return snowflake.nextIdStr();
}
}
jmeter:
設置
0異常: