获取IP和byte转long遇到的小问题


介绍

因为业务需求新项目的流水号系统从 ‘数据库自增步长+分段式锁’ 换成使用 雪花流水号, 修改机器标识和数据中心字段为自动获取ip后三位, 人工保证ip后三位不相同

示例

雪花流水号 - 改造版

修改内容如下:
删除构造, 修改数据位数, 添加静态代码块

private final static long MACHINE_BIT = 8;
private final static long DATA_CENTER_BIT = 2;
static {
    try {
        InetAddress localHost = InetAddress.getLocalHost();
        address = localHost.getAddress()[3] & 0xff;
        System.out.println("当前系统的 address 为: " + address);
    } catch (UnknownHostException e) {
        throw new IllegalArgumentException("DATA_CENTER_ID can't be greater than MAX_DATA_CENTER_NUM or less than 0");
    }
}

注意点

服务器配置host

服务器对应的 hostname 需要配置ip地址

cat /etc/hosts
byte 转换 long需要 & 0xff

当获取ip大于127时转换出来为负值, 所以需要 & 0xff


   版权声明

文章作者: liuzhihang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源!

评论
 上一篇
logstash时间戳差8个小时 logstash时间戳差8个小时
在使用logstash输出内容要es中时, 指定index为系统名称+时间(年月日), 时间会自动匹配'@timestamp'字段并格式化, 但是在实际使用过程中, 发现在上午八点之前的消息会被创建到昨天的索引里面...
2018-12-20
下一篇 
基于LinkHashMap的LRU缓存淘汰 基于LinkHashMap的LRU缓存淘汰
LRU缓存淘汰是redis中的一种淘汰策略, 当内存大小不足以存放数据时, 此时存入新数据, 将删除较早存入的数据.
2018-11-19
  目录