java 商城系統源碼分享-snowflake發號器

目的

snowflake是常見的id(編號)生成算法,由時間戳+業務id+機器id+序列號組合而成,在電商系統中,用於訂單號的生成、支付單號的生成等等。本發號器主要解決在容器化的部署情況時,自動擴容時保持機器id的唯一性。

本解決方案是基於spring boot實現,適合將發號器嵌入在應用內部,而非獨立的生成器app:
在這裏插入圖片描述

思路

難點在於擴容時,產生的一個app多個實例。 通過的app啓動時在redis中註冊自己,同時存在一個心跳,定時向redis中報告自己的存活。 如果掛掉,reids裏面清掉自己的實例,根據實例的情況運算workid。
在這裏插入圖片描述

代碼:

https://gitee.com/javashop/snowflake

使用

@Autowired    SnCreator snCreator;  
 public String test() {       
    String id = snCreator.create(1);   
    return id;  
}

其中create的參數是子業務id,不同模塊調用時加以區分。

整合

如果要整合進自己的app,參考JavashopAppRunner,使應用在啓動時,註冊自己的實例:

@Component
@Order(value = 1)
public class JavashopAppRunner implements ApplicationRunner {

    @Autowired
    protected InstanceContext instanceContext;


    @Override
    public void run(ApplicationArguments args) throws Exception {
        //註冊本實例
        instanceContext.register();

    }
    
}

以上爲本次分享內容,更多精彩文章可以查看我的文章列表,也可以關注我們公衆號 “易族智匯” ,每週都會有技術文章分享。

易族智匯(javashop)原創文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章