springcloud 分布式微服务生成唯一订单号[SnowFlake]

文章介绍了如何在项目中引入Hutool库中的Captcha模块,并详细展示了SnowFlake类的使用,包括获取分布式唯一标识、IP地址标识、线程安全的ID生成以及时间戳解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:引入糊涂工具包
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-captcha</artifactId>
    <version>5.8.0</version>
</dependency>

二:SnowFloake.class

/**
 * 作者:Longki
 * 时间:2023/9/5
 * 功能:SnowFlake使用
 */
@Component
public class SnowFlake {

    //分布式唯一标识码-认定是哪一台机器
    private static long workerId = 0;
    private static long datacenterId = 0;
    private Snowflake snowflake = IdUtil.createSnowflake(workerId,datacenterId);

    //获取ip地址最后一段-作为唯一标识
    private long getIp4(){
        try {
            String str = NetUtil.getLocalhostStr();
            int len = str.length();
            String lastStr = str.substring(len - 1,len);
            return Long.valueOf(lastStr);
        }catch (Exception e){
            return 0;
        }
    }

    //执行一次获取唯一标识机器码(0-31)
    @PostConstruct
    public void init(){
        try{
            workerId = getIp4();
        }catch (Exception e){}
    }

    //同步锁-线程排队
    public synchronized long snowFlakeId(){
        return snowflake.nextId();
    }

    //反向解析序列号时间戳-当前订单下单时间
    public long getSnowFlakeTime(long snowFlakeId){
        return snowflake.getGenerateDateTime(snowFlakeId);
    }
}

三:调用

SnowFlake snowFlake = new SnowFlake();
long snowFlakeId = snowFlake.snowFlakeId();
log.error("序列号:"+snowFlakeId);
log.error("解析:"+snowFlake.getSnowFlakeTime(snowFlakeId));
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值