{"id":23296329,"url":"https://github.com/doublechaintech/global-unique-id-generator","last_synced_at":"2025-08-22T02:31:21.711Z","repository":{"id":37168451,"uuid":"185170825","full_name":"doublechaintech/global-unique-id-generator","owner":"doublechaintech","description":"应用于微服务和分布式应用程序全局唯一ID生成器，包含服务器端和客户端","archived":false,"fork":false,"pushed_at":"2022-06-21T01:07:27.000Z","size":55,"stargazers_count":11,"open_issues_count":6,"forks_count":7,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-08T20:48:18.757Z","etag":null,"topics":["id-generator","microservice"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/doublechaintech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-05-06T09:59:59.000Z","updated_at":"2024-07-06T13:00:53.000Z","dependencies_parsed_at":"2022-09-09T02:12:32.188Z","dependency_job_id":null,"html_url":"https://github.com/doublechaintech/global-unique-id-generator","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/doublechaintech/global-unique-id-generator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doublechaintech%2Fglobal-unique-id-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doublechaintech%2Fglobal-unique-id-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doublechaintech%2Fglobal-unique-id-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doublechaintech%2Fglobal-unique-id-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/doublechaintech","download_url":"https://codeload.github.com/doublechaintech/global-unique-id-generator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doublechaintech%2Fglobal-unique-id-generator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271575626,"owners_count":24783573,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-22T02:00:08.480Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["id-generator","microservice"],"created_at":"2024-12-20T07:11:26.896Z","updated_at":"2025-08-22T02:31:21.408Z","avatar_url":"https://github.com/doublechaintech.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ID生成器\n在分布式环境中，通常需要使用到分布式ID生成器来保证得到全局唯一的ID。这里，我们提供了一个简单的封装来方便的使用全局唯一的ID生成器。目前提供了Twitter退出的雪花ID(SnowFlake)。\n\n# 模块说明\n\n- snowflake 该模块内包含snowflake的实现代码，和集群管理的逻辑，目前支持ignite和zookeeper来管理集群。\n- snowflake-ignite-starter 该模块封装了由ignite管理集群的springboot starter\n- snowflake-zookeeper-starter 该模块封装了由zookeeper管理集群的springboot starter\n\n# 使用方法\n\n## 非springboot项目\n\n### Maven依赖\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.doublechain\u003c/groupId\u003e\n    \u003cartifactId\u003esnowflake\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n#### 静态配置方式\n```java\nNodeIdentityProvider nodeIdentityProvider = new DefaultNodeIdentityProvider(worker, dataCenter, group);\nSnowFlakeIdGenerator idGenerator = new SnowFlakeIdGenerator(nodeIdentityProvider, startEpochMs);\nidGenerator.start();\nfor (int i = 0; i \u003c 5 ; i++) {\n    long id = idGenerator.nextId();\n}\nidGenerator.stop();\n```\n#### 使用ignite管理\n```java\nTcpDiscoverySpi discoverySpi = new TcpDiscoverySpi();\nTcpDiscoveryMulticastIpFinder ipFinder = new TcpDiscoveryMulticastIpFinder();\nipFinder.setMulticastGroup(\"228.1.2.4\");\ndiscoverySpi.setIpFinder(ipFinder);\nNodeIdentityProvider nodeIdentityProvider = IgniteNodeIdentityProvider(group, dataCenter, discoverySpi);\nSnowFlakeIdGenerator idGenerator = new SnowFlakeIdGenerator(nodeIdentityProvider, startEpochMs);\nidGenerator.start();\nfor (int i = 0; i \u003c 5 ; i++) {\n    long id = idGenerator.nextId();\n}\nidGenerator.stop();\n```\n\n#### 使用zookeeper管理\n```java\nNodeIdentityProvider nodeIdentityProvider = ZookeeperNodeIdentityProvider.builder(dataCenter, group, zkServers)\n                                                .namespace(namespace)\n                                                .sessionTimeoutMs(sessionTimeoutMs)\n                                                .build();\nSnowFlakeIdGenerator idGenerator = new SnowFlakeIdGenerator(nodeIdentityProvider, startEpochMs);\nidGenerator.start();\nfor (int i = 0; i \u003c 5 ; i++) {\n    long id = idGenerator.nextId();\n}\nidGenerator.stop();\n```\n\n### Springboot项目\n\n#### 使用ignite管理\n\n##### Maven依赖\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.doublechain\u003c/groupId\u003e\n    \u003cartifactId\u003esnowflake-ignite-starter\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n##### Springboot配置文件\n```yaml\ndoublechain:\n  idgen:\n    snowflake:\n      data-center: 1  #指定snowflake的data center的Id\n      group: test #group用于隔离snowflake的全局性的范围，比如你可以指定在test这个项目内全局唯一\n      start-timestamp: 2019-06-01T12:00:00 #由于snowflake的时间戳采用41位存储。所以最多能使用69年，请合理设置起始时间。设定后不应该再改动，默认值是2018-01-01T00:00:00\n      ignite:\n        multicast:\n          group-ip: 228.1.2.4 #ignite用于组播通讯的ip\n          multicast-port: 47401 #ignite用于发送组播消息的端口\n        discovery-type: multicast #节点发现发现目前只支持组播\n```\n\n#### 使用zookeeper管理\n\n##### Maven依赖\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.doublechain\u003c/groupId\u003e\n    \u003cartifactId\u003esnowflake-zookeeper-starter\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n##### Springboot配置文件\n```yaml\ndoublechain:\n  idgen:\n    snowflake:\n      data-center: 1  #指定snowflake的data center的Id\n      group: test #group用于隔离snowflake的全局性的范围，比如你可以指定在test这个项目内全局唯一\n      start-timestamp: 2019-06-01T12:00:00 #由于snowflake的时间戳采用41位存储。所以最多能使用69年，请合理设置起始时间。设定后不应该再改动，默认值是2018-01-01T00:00:00\n      zookeeper:\n        namespace: my-snowflake #注册到zookeeper上的根路径，和其他中间件公用同一个zookeeper集群的时候可能会用到。\n        servers: 10.0.0.32:2181 #zookeeper集群地址，逗号分隔\n        session-timeout-ms: 30000 #zookeeper会话超时时间\n```\n\n由于SnowFlakeIdGenerator已经被spring来管理，所以使用的时候，直接注入就行，不需要考虑他的start和stop。\n```java\n@Autowired\nprivate SnowFlakeIdGenerator idGenerator;\n```\n\n### 说明\n\n- 使用ignite管理时，采用的是组播来通讯的，所以必须保证网络支持组播。另外，由于是组播通讯，同一个组播集群内，节点数量应该保持在百级。\n- 使用zookeeper管理时，依赖zookeeper管理集群，节点数量可以在千级。","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoublechaintech%2Fglobal-unique-id-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdoublechaintech%2Fglobal-unique-id-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoublechaintech%2Fglobal-unique-id-generator/lists"}