zoukankan      html  css  js  c++  java
  • java 商城系统源码分享-snowflake发号器

    目的

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

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

     

    思路

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

    代码:

    https://gitee.com/javashop/snowflake

    使用

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

    其中create的参数是子业务id,不同模块调用时加以区分。

    整合

    如果要整合进自己的app,参考JavashopAppRunner,使应用在启动时,注册自己的实例:

     1 @Component
     2 @Order(value = 1)
     3 public class JavashopAppRunner implements ApplicationRunner {
     4 
     5     @Autowired
     6     protected InstanceContext instanceContext;
     7 
     8 
     9     @Override
    10     public void run(ApplicationArguments args) throws Exception {
    11         //注册本实例
    12         instanceContext.register();
    13 
    14     }
    15     
    16 }

    以上为本次分享内容,更多精彩文章可以查看我的文章列表,也可以关注我们公众号 "易族智汇" ,每周都会有技术文章分享。

                                                                                                                                  易族智汇(javashop)原创文章

  • 相关阅读:
    php l练习(写着玩)
    位、字节、字
    ueditor上传图片时目录创建失败的问题解决方法
    tp5插入百度富文本编辑器UEditor
    PHP实现用户异地登录提醒功能的方法
    tp5知识点
    TP5语法
    微擎url
    微擎多图片上传
    微擎函数Iserializer和Iunserializer序列化函数
  • 原文地址:https://www.cnblogs.com/javashop-docs/p/12777441.html
Copyright © 2011-2022 走看看