MongoDB
cosid-mongo 通过应用的同步 MongoClient 把号段计数器和机器号租约保存在 MongoDB 中:
MongoIdSegmentDistributor:号段计数器,每个生成器在cosid集合中占一个文档。MongoMachineLeaseStore:机器号租约,每个机器号在cosid_machine集合中占一个文档。租约时间取自服务器的localTime(hello命令)。
集合不存在时会在启动时创建。
仅支持同步驱动
响应式相关类(me.ahoo.cosid.mongo.reactive)已在 4.0 移除。请使用同步驱动 org.mongodb:mongodb-driver-sync,spring-boot-starter-data-mongodb 已包含它。classpath 中只有响应式驱动时,Starter 会在启动时失败。
安装
kotlin
dependencies {
implementation(platform("me.ahoo.cosid:cosid-bom:$cosidVersion"))
implementation("me.ahoo.cosid:cosid-spring-boot-starter")
implementation("me.ahoo.cosid:cosid-mongo")
implementation("org.springframework.boot:spring-boot-starter-data-mongodb")
}xml
<dependencies>
<dependency>
<groupId>me.ahoo.cosid</groupId>
<artifactId>cosid-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>me.ahoo.cosid</groupId>
<artifactId>cosid-mongo</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</dependencies>配置
yaml
spring:
mongodb:
uri: mongodb://localhost:27017
cosid:
namespace: ${spring.application.name}
machine:
enabled: true # Snowflake ID 和 CosIdGenerator 需要
distributor:
type: mongo
segment:
enabled: true # 号段 ID 需要
distributor:
type: mongo| 属性 | 默认值 | 说明 |
|---|---|---|
cosid.segment.distributor.mongo.database | cosid_db | cosid 集合所在的数据库 |
cosid.segment.distributor.mongo.timeout | 5s | 每次号段操作(驱动的 timeoutMS);0 表示不限制 |
cosid.machine.distributor.mongo.database | cosid_db | cosid_machine 集合所在的数据库 |
cosid.machine.distributor.mongo.timeout | 5s | 每次机器号操作(驱动的 timeoutMS);必须为正数 |
请开启 MongoDB 日志(journaling,默认开启),并在副本集上使用 majority 写关注,确保已确认的计数器更新在故障切换后不会丢失。
