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)原创文章
相关推荐
瓜牛呱呱 2020-11-12
柳木木的IT 2020-11-04
yifouhu 2020-11-02
lei0 2020-11-02
源码zanqunet 2020-10-28
源码zanqunet 2020-10-26
一叶梧桐 2020-10-14
码代码的陈同学 2020-10-14
lukezhong 2020-10-14
lzzyok 2020-10-10
anchongnanzi 2020-09-21
clh0 2020-09-18
changcongying 2020-09-17
星辰大海的路上 2020-09-13
abfdada 2020-08-26
mzy000 2020-08-24
shenlanse 2020-08-18
zhujiangtaotaise 2020-08-18
xiemanR 2020-08-17