1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

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

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

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

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

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

        2. 提供自增長整數(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的配置很簡單,而且都提供默認(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接口說明

        /**
         * 獲取自增長的主鍵
         *
         * @param key 主鍵的key,一般可以使用表名
         * @return long exp:1,2,3...
         */
        long getIncrementId(String key);
        
        /**
         * 手動(dò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)造,只是想把事情變得簡單點(diǎn),給使用者一點(diǎn)甜頭。

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

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            精品国产免费久久久久久桃子图片 | 国产毛片精品一区二区色欲黄A片 | 无码无毛 | 欧美一级A片免费看视频小说 | 日韩人妻一区高清 | 青青草视频在线观看 | 国产做爰全免费的视频黑人 | 婷婷精品视频 | 成人h视频免费观看 | 摸逼逼网 |