日志

spring cloud微服务快速教程之(十二) 分布式ID解决方案(mybatis-plus篇)

 来源    2020-09-16    0  

0-前言

  分布式系统中,分布式ID是个必须解决的问题点;

  雪花算法是个好方式,不过不能直接使用,因为如果直接使用的话,需要配置每个实例workerId和datacenterId,在微服务中,实例一般动态配置,直接指定具体实例的这两个参数是不现实的;

  所以,一般采用雪花算法的变种,主要是将这两个参数由手动配置改为动态生成,美团leaf、百度uid-generator都属于改良的变种算法,可以适当采用;

  不过这些算法都或多或少对其他存在一定依赖,不是非常方便,今天我们来说一种非常方便的分布式ID解决方案,那就是mybatis plus 内置的方式;

  项目中基本都会使用到MYSQL,ORM无疑mybatis plus是最好用的;所以这种分布式ID方式很多时候都能在项目中采用;它实际也是雪花算法的变种,它采用网卡序列号等来动态生成workerId和datacenterId,在分布式的系统中,是可以保证ID唯一性的;

1-实现

1-1、添加依赖

<!-- 9、集成mybatis-plus  -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>

1-2、添加配置

mybatis plus使用前面有介绍过,请参考:https://www.cnblogs.com/yanghj/p/12446686.html

1-3、使用

  两种方式:

一种是数据库自动生成并插入,这种方式在插入数据库时,数据库自动生成并插入,无需用户手动填写,这种方式我们实际很少使用,因为在插入后才能拿到该ID,但是很多时候,我们在插入前就需要用到该ID,用来做其他关联业务处理,所以手动插入比较实用点;

一种是手动插入方式:ID用mybatis plus来生成,然后再塞入ID字段中;

/**
     * 编号
     */
    @TableId(value = "id",type = IdType.INPUT) //2、该注解表示ID手动填入
    //@TableId(value = "id",type = IdType.ASSIGN_ID) //1、该注解表示ID自动生成并插入,无需用户填写
    private Long id;

手动插入时,写个IDhelper生成ID,代码如下:

package com.anson.utils;

import com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;

import java.util.UUID;

/**
 * 描述: ID生成
 * 版权: Copyright (c) 2020
 * 公司: XXX
 * 作者: yanghj
 * 版本: 4.0
 * 创建日期: 2020/9/16 9:59
 */
public class IDhelper
{
    //用mybatis-plus生成Long ID
    public  static Long getNextId()
    {
        IdentifierGenerator identifierGenerator=new DefaultIdentifierGenerator();
        Number id=  identifierGenerator.nextId(new Object());
        Long nextid = Long.parseLong(id+"");
        return nextid;
    }

}

使用的时候:

Long id = IDhelper.getNextId();

2-总结

  使用到MySQL数据库的系统,这种分布式ID解决方案无疑是目前最方便的方案,当然,也可以采用其他方案;自由选择;

相关文章
spring cloud微服务快速教程之(四)熔断器(Hystrix)及其工具(Dashboard、Turbine)
日志0-为什么需要熔断器 在分布式系统中,各个服务相互调用相互依赖,如果某个服务挂了,很可能导致其他调用它的一连串服务也挂掉或者在不断等待中耗尽服务器资源,这种现象称之为雪崩效应: 未来防止系统雪崩,熔断 ...
1
spring cloud微服务快速教程之(六) 应用监控 spring boot admin
日志0-前言 当我们发布了微服务后,我们希望对各个应用的各个运行状况进行一个监控:这个时候spring boot admin,就出场了: spring boot admin:是一个监控和管理spring ...
1
spring cloud 微服务 – 流程图
问答spring cloud技术体系架构图::
1
性能 – Spring Cloud微服务内存使用情况
问答我在AWS上的小型/中型机器上运行多个微服务(Spring cloud docker),最近我发现这些机器经常耗尽并需要重新启动. 我正在研究这种断电的原因,考虑可能的内存泄漏或实例/容器上的错误配置 ...
2
Spring Cloud微服务系列文,服务调用框架Feign
日志    之前博文的案例中,我们是通过RestTemplate来调用服务,而Feign框架则在此基础上做了一层封装,比如,可以通过注解等方式来绑定参数,或者以声明的方式来指定请求返回类型是JSON.  ...
1
Spring Cloud微服务系列文,Hystrix与Eureka的整合
日志    和Ribbon等组件一样,在项目中,Hystrix一般不会单独出现,而是会和Eureka等组件配套出现.在Hystrix和Eureka整合后的框架里,一般会用到Hystrix的断路器以及合并请 ...
1
Spring Cloud 微服务架构全链路实践
日志阅读目录: 1. 网关请求流程 2. Eureka 服务治理 3. Config 配置中心 4. Hystrix 监控 5. 服务调用链路 6. ELK 日志链路 7. 统一格式返回 Java 微服务 ...
1
Spring Cloud 微服务中搭建 OAuth2.0 认证授权服务
日志在使用 Spring Cloud 体系来构建微服务的过程中,用户请求是通过网关(ZUUL 或 Spring APIGateway)以 HTTP 协议来传输信息,API 网关将自己注册为 Eureka ...
1
Spring Cloud微服务初探
日志学习初衷 因为加了不少优秀的知识星球,结交了更多的小伙伴,加了更多的群,每每在自我介绍的时候,都说自己是Android & Java攻城狮. 然鹅,有的小伙伴就来问了,你是搞Java的,那对S ...
Spring Cloud微服务架构升级总结
日志  ↵ [编者的话]微服务的概念源于 2014 年 3 月 Martin Fowler 所写的一篇文章“Microservices”.文中内容提到:微服务架构是一种架构模式,它提倡将单一应用程序划分成 ...
1
Spring Cloud 微服务分布式链路跟踪 Sleuth 与 Zipkin
日志Zipkin 是一个开放源代码分布式的跟踪系统,由 Twitter 公司开源,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集.存储.查找和展现.它的理论模型来自于 Googl ...
1
多线程 java多线程Completablefuture 详解在spring cloud微服务之间调用,防止接口超时的应用 未完成
日志参考地址:https://www.jianshu.com/p/6f3ee90ab7d3 示例: public static void main(String[] args) throws Interr ...
1
spring colud spring cloud微服务项目搭建spring boot2.0
日志spring cloud微服务项目搭建 =================================== 示例版本: 1.spring boot 2.0版本 2.开发工具 IntellJ IDE ...
1
spring cloud docker 使用docker在centOS上部署spring cloud微服务架构服务
日志项目GitHub地址 ================================================================================== 部署过程: ...
6
Spring Cloud微服务实战:手把手带你整合eureka&zuul&feign&hystrix
日志转载自:https://www.jianshu.com/p/cab8f83b0f0e 代码实现:https://gitee.com/ccsoftlucifer/springCloud_Eureka_z ...
Spring Cloud微服务开发笔记5——Ribbon负载均衡策略规则定制
日志上一篇文章单独介绍了Ribbon框架的使用,及其如何实现客户端对服务访问的负载均衡,但只是单独从Ribbon框架实现,没有涉及spring cloud.本文着力介绍Ribbon的负载均衡机制,下一篇文 ...
1
SPRING CLOUD微服务DEMO-下篇
日志1 Hystix 1.1 简介 Hystix是Netflix开源的一个延迟和容错库,用于隔离访问远程服务.第三方库,防止出现级联失败. 我感觉难以解释清楚,鉴于接下来的demo项目基本不会用这个模块, ...
1
SPRING CLOUD微服务DEMO-上篇
日志1. 微服务架构 系统架构的演变从单应用,到根据每个模块垂直拆分,到分布式服务,SOA,到目前进化成了微服务形态. 微服务的特点 单一职责:微服务中每一个服务都对应唯一的业务能力,做到单一职责 微:微 ...
1
Spring Cloud 微服务架构的五脏六腑,统统晒一晒!
日志Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件. 注:Spring Boot 简单理解就是简化 Spring 项目的搭建.配置.组 ...
1
spring cloud微服务架构 服务提供者和服务消费者
日志服务提供者和服务消费者 下面这张表格,简单描述了服务提供者/消费者是什么: | 名词 | 概念 | | ----- | ----------------------- | | 服务提供者 | 服务的被 ...
1