java 商城系统源码分享-snowflake发号器

39 篇文章 1 订阅

目的

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)原创文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kingapex1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值