<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          melon-idfactory提供 ID 生成服務(wù)的主鍵工廠

          聯(lián)合創(chuàng)作 · 2023-09-28 03:12

          主鍵工廠,提供ID生成服務(wù),保證ID的唯一性。 

          使用motan rpc + restful接口兩種調(diào)用方式,簡(jiǎn)單配置,快速部署,使用方便。

          目前提供3中ID服務(wù):

          1. 提供唯一有序的,不重復(fù)的64位整數(shù)id生成服務(wù)(推薦使用)

          2. 提供自增長(zhǎng)整數(shù)ID生產(chǎn)服務(wù)

          3. 提供32位UUID生產(chǎn)服務(wù)

          使用說明

          1.依賴安裝

          項(xiàng)目運(yùn)行依賴JDK1.8和MongoDB,安裝方法自行百度

          2.發(fā)布版下載

          獲取最新版本的服務(wù)包,目前版本為v1.0.0,下載地址

          解壓melon-idfactory-server-assembly.tar.gz,目錄如下:

          • bin 運(yùn)行腳本,提供windows和linux兩種運(yùn)行方式

          • conf 配置文件

          • lib 項(xiàng)目庫

          3.配置說明

          melon-idfactory的配置很簡(jiǎn)單,而且都提供默認(rèn)配置,一般使用時(shí)關(guān)注少量配置即可

          # conf.properties

          # mongodb連接配置
          mongo.host=127.0.0.1
          mongo.port=27017   #默認(rèn)為"27017"
          mongo.databaseName=MelonIdFactory   #默認(rèn)MelonMongoDbDefault

          # uid-generator配置,與64位有序ID的功能有關(guān),可以不做改動(dòng),全部使用默配置
          #uid-generator配置詳細(xì)介紹
          uid.boostPower=3
          uid.paddingFactor=50
          uid.scheduleInterval=60
          uid.timeBits=28
          uid.workerBits=22
          uid.seqBits=13
          uid.epochStr=2017-10-1

          # RPC遠(yuǎn)程調(diào)用配置,使用motan提供rpc服務(wù)和restful接口
          motan.service.export=8002   # Java服務(wù)暴露端口,默認(rèn)為"8002"
          motan.restful.export=8004    # Restful接口暴露端口,默認(rèn)為"8004"

          # Java服務(wù)支持使用zookeeper或consul為注冊(cè)中心,配置如下,默認(rèn)為direct直連,可以不配置 motan.registry.regProtocol=zookeeper
          motan.registry.address=127.0.0.1:2181

          4.運(yùn)行

          進(jìn)入server的bin目錄,執(zhí)行啟動(dòng)腳本

          • start.bat

          • start.sh

          • stop.sh

          (windows運(yùn)行start.bat,linux運(yùn)行start.sh)

          PS:
          melon-idfactory-client.jar 為測(cè)試調(diào)用包,提供了motan rpc的調(diào)用封裝,使用spring的小伙伴可以引用, 
          其他小伙伴可以直接運(yùn)行server,調(diào)用restful接口即可。

          調(diào)用說明

          restful調(diào)用說明

          client調(diào)用說明

          引用melon-idfactory-client.jar

          可自行編譯源碼或者直接下載JAR包,下載地址

          目前只支持spring項(xiàng)目,可擴(kuò)展,在你項(xiàng)目的spring配置文件中加入如下配置:

          <context:component-scan base-package="com.fetech"/>
          
          <bean id="propertyConfigurer" class="com.fetech.melon.context.property.MelonPropertyPlaceholderConfigurer">
              <property name="locations">
                  <list>
                      <value>classpath*:META-INF/melon/idfactory_conf.properties</value>
                  </list>
              </property>
          </bean>

          # conf.properties

          # RPC服務(wù)地址配置,無注冊(cè)中心時(shí)使用
          motan.referer.directUrl=127.0.0.1:8002
          # 如服務(wù)使用注冊(cè)中心發(fā)布,需要配置對(duì)應(yīng)的注冊(cè)中心地址
          motan.registry.regProtocol=zookeeper
          motan.registry.address=127.0.0.1:2181

          代碼中直接注入IdFactoryClient即可

          @RunWith(SpringJUnit4ClassRunner.class)
          @ContextConfiguration(locations = {"classpath*:META-INF/spring/spring-test-idfactory-client.xml"})
          public class TestIF {
          
              @Resource
              private IdFactoryClient idFactoryClient;
          
              @Test
              public void uuid() {
                  LogUtil.debug("uuid:");
                  for (int i = 0; i < 10; i++) {
                      LogUtil.debug(idFactoryClient.getUUID());
                  }
              }
          
              @Test
              public void uid() {
                  LogUtil.debug("64 uid:");
                  for (int i = 0; i < 10; i++) {
                      long id = idFactoryClient.get64Uid();
                      LogUtil.debug(id + "");
                      LogUtil.debug(idFactoryClient.parse64Uid(id));
                  }
              }
          
              @Test
              public void incrementId() {
                  LogUtil.debug("auto increment id:");
                  for (int i = 0; i < 10; i++) {
                      LogUtil.debug(idFactoryClient.getIncrementId("test_1") + "");
                  }
              }
          
              @Test
              public void incrementId2() {
                  LogUtil.debug("auto increment2 id:");
                  boolean ret = idFactoryClient.initIncrementId("test_2", 10);
                  Assert.assertTrue(ret);
                  for (int i = 0; i < 10; i++) {
                      LogUtil.debug(idFactoryClient.getIncrementId("test_2") + "");
                  }
              }
          }

          IdFactoryClient接口說明

          /**
           * 獲取自增長(zhǎng)的主鍵
           *
           * @param key 主鍵的key,一般可以使用表名
           * @return long exp:1,2,3...
           */
          long getIncrementId(String key);
          
          /**
           * 手動(dòng)初始化自增長(zhǎng)的主鍵,一般初始化一次即可,如沒有初始化,默認(rèn)getIncrementId從1開始
           *
           * @param key   主鍵的key,一般可以使用表名
           * @param start 組件的初始值,默認(rèn)為0,則從1開始
           * @return boolean 初始化成功或失敗
           */
          boolean initIncrementId(String key, long start);
          
          /**
           * 獲取32位的UUID
           *
           * @return String exp:ea5846a348764fc4a7311d6a340e9d14,ae2653087ec84dd59b3adcf4c307cf97...
           */
          String getUUID();
          
          /**
           * 獲取有序的64位的ID,推薦使用
           *
           * @return long exp:69728553533104128,69728553533104129,69728553533104130...
           */
          long get64Uid();
          
          /**
           * 解析有序的64位的ID
           *
           * @param uid 有序的64位的ID
           * @return json exp:
           * {
           * "UID": "69728553533104129",
           * "timestamp": "2017-11-08 11:42:48",
           * "workerId": "87",
           * "sequence": "1"
           * }
           */
          String parse64Uid(long uid);

          其他說明

          1. 64位有序ID使用了百度uid-generator,是對(duì)twitter的snowflake算法的實(shí)現(xiàn)

          1. 為什么要使用64d位的有序ID

          特別說明,使用melon(甜瓜)開發(fā)框架

          甜瓜系列不是發(fā)明創(chuàng)造,只是想把事情變得簡(jiǎn)單點(diǎn),給使用者一點(diǎn)甜頭。

          瀏覽 39
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美熟女一区 | 久久久成人影院 | 男女操逼视频网站入口免费观看1草溜 | www.日韩乱码 | 人人操手机观看 |