龙空技术网

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

JAVASHOP 581

前言:

今天你们对“java发号器”大致比较重视,小伙伴们都想要了解一些“java发号器”的相关知识。那么小编同时在网络上搜集了一些关于“java发号器””的相关内容,希望小伙伴们能喜欢,咱们快快来学习一下吧!

目的

snowflake是常见的id(编号)生成算法,由时间戳+业务id+机器id+序列号组合而成,在电商系统中,用于订单号的生成、支付单号的生成等等。本发号器主要解决在容器化的部署情况时,自动扩容时保持机器id的唯一性。

本解决方案是基于spring boot实现,适合将发号器嵌入在应用内部,而非独立的生成器app:

思路

难点在于扩容时,产生的一个app多个实例。 通过的app启动时在redis中注册自己,同时存在一个心跳,定时向redis中报告自己的存活。 如果挂掉,reids里面清掉自己的实例,根据实例的情况运算workid。

代码:

使用

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

标签: #java发号器