赞
踩
Vesta是一款通用的ID产生器,互联网俗称统一发号器,它支持三种发布模式:嵌入发布模式、中心服务器发布模式、REST发布模式,根据业务的性能需求,它可以产生最大峰值型和最小粒度型两种类型的ID,它的实现架构使其具有高性能,高可用和可伸缩等互联网产品需要的质量属性,是一款通用的高性能的发号器产品。
特性:
本章项目实战环境:
Spring Cloud Alibaba 模块化开发,vesta配置在公用模块sm-common,基于业务场景自行定义;
Vesta的jar包以及配置文件下载:https://download.csdn.net/download/u011673769/33155559
项目架构
sm-commodity:商品模块,只涉及商品相关业务需求;
sm-common:公用模块,主要存公用配置信息,以及工具类等;
sm-gateway:网关模块,所有模块的统一入口;
在sm-common根目录下创建lib文件夹,并导入vesta相关jar包,如下图
在sm-common的pom.xml中引入vesta的依赖:
- <!-- 引入本地jar包-->
- <dependency>
- <groupId>vesta.intf</groupId>
- <artifactId>vesta-intf</artifactId>
- <version>1.0.0</version>
- <scope>system</scope>
- <systemPath>${project.basedir}/lib/vesta-intf.jar</systemPath>
- </dependency>
-
- <dependency>
- <groupId>vesta.service</groupId>
- <artifactId>vesta-service</artifactId>
- <version>1.0.0</version>
- <scope>system</scope>
- <systemPath>${project.basedir}/lib/vesta-service.jar</systemPath>
- </dependency>
在sm-common的resource下导入vesta的配置文件,如下
vesta-rest.properties
- # 机器ID
- vesta.machine=1021
- ## 生成方式,0表示 嵌入发布模式 1表示 中心服务器发布模式 2表示 REST发 布模式
- vesta.genMethod=0
- # # ID类型,1表示最小粒度型 0表示最大峰值
- vesta.type=1
vesta-rest-main.xml
- <?xml version="1.0" encoding="UTF-8"?>
-
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
-
- <bean
- class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="locations" value="classpath:/vesta/vesta-rest.properties"/>
- </bean>
-
- <bean id="idService" class="com.robert.vesta.service.factory.IdServiceFactoryBean"
- init-method="init">
- <property name="providerType" value="PROPERTY"/>
- <property name="type" value="${vesta.type}"/>
- <property name="genMethod" value="${vesta.genMethod}"/>
- <property name="machineId" value="${vesta.machine}"/>
- </bean>
-
- </beans>
创建类 UidService.java
- package net.sm.util;
-
- import com.robert.vesta.service.bean.Id;
- import com.robert.vesta.service.intf.IdService;
- import org.checkerframework.common.reflection.qual.ForName;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import org.springframework.stereotype.Component;
- import org.springframework.stereotype.Service;
-
- import javax.annotation.Resource;
- import java.util.Date;
-
- /**
- * <p>Title: UidService</p>
- * <p>Description: 统一发号器,它具有全局唯一、粗略有序、可反解和可制造等特性</p>
- * 三种发布模式:嵌入发布模式、中心服务器发布模式、REST发布模式
- * @author GaoYanJia
- */
- @Service("MyUidService")
- public class UidService {
-
- private final IdService idService;
- public UidService() {
- //重要,这个路径必须指定你存放 vesta-rest-main.xml 的路径
- ApplicationContext ac = new ClassPathXmlApplicationContext(
- "vesta/vesta-rest-main.xml");
- idService = (IdService) ac.getBean("idService");
- }
-
- public long genId() {
- return idService.genId();
- }
-
- public String genIdString() {
- return idService.genId()+"";
- }
-
- public Id explainId(long id) {
- return idService.expId(id);
- }
-
- public Date transTime(long time) {
- return idService.transTime(time);
- }
-
- public long makeId(long version, long type, long genMethod, long machine, long time, long seq) {
-
- long madeId = -1;
- if (time == -1 || seq == -1)
- throw new IllegalArgumentException("Both time and seq are required.");
- else if (version == -1) {
- if (type == -1) {
- if (genMethod == -1) {
- if (machine == -1) {
- madeId = idService.makeId(time, seq);
- } else {
- madeId = idService.makeId(machine, time, seq);
- }
- } else {
- madeId = idService.makeId(genMethod, machine, time, seq);
- }
- } else {
- madeId = idService.makeId(type, genMethod, machine, time, seq);
- }
- } else {
- madeId = idService.makeId(version, type, genMethod, time, seq, machine);
- }
-
- return madeId;
- }
-
- }
API使用说明:
genId
生成全局唯一 ID号explainId
反解全局唯一 ID号,得到可以解释 ID号含义的 JSON数据makeId
手工制造 ID新建一个测试的Controller,并引入UidService
- package net.sm.controller;
-
- import com.alibaba.fastjson.JSONObject;
- import net.sm.util.UidService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.*;
-
-
- /**
- * @Author GGYYJJ
- * @Date 2021/9/29 17:48
- * @Version 1.0
- * @Title
- * @Desc
- */
- @RestController
- @RequestMapping("/api/commodity/v1/")
- public class CommodityController {
-
- @Autowired
- private UidService myUidService;
-
- /**
- 测试 Vesta API功能
- **/
- @PostMapping("/test")
- public JSONObject test(){
- long uid = myUidService.genId();
- System.out.println("获取唯一id"+uid);
- Id config = myUidService.explainId(uid);
- System.out.println("解码,获取uid内配置信息:"+config);
- Date date = myUidService.transTime(config.getTime());
- System.out.println("解码后,将date转为时间:"+date);
- }
- }
控制台输入如下,配置成功;
至此,Spring Cloud Alibaba 引入Vesta结束,有帮助的朋友点个赞,关注下。后续还有更多项目实战文章;小编初期写文章,谢谢支持。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。