feat: 1.2.0

1. 添加测试用例
This commit is contained in:
byteblogs168 2023-05-06 17:17:40 +08:00
parent 669dde1588
commit f23ad83b6d
4 changed files with 70 additions and 5 deletions

View File

@ -71,6 +71,7 @@ CREATE TABLE `retry_task_0`
KEY `idx_group_name_scene_name` (`group_name`, `scene_name`), KEY `idx_group_name_scene_name` (`group_name`, `scene_name`),
KEY `idx_retry_status` (`retry_status`), KEY `idx_retry_status` (`retry_status`),
KEY `idx_idempotent_id` (`idempotent_id`), KEY `idx_idempotent_id` (`idempotent_id`),
KEY `idx_biz_no` (`biz_no`),
UNIQUE KEY `uk_name_unique_id` (`group_name`, `unique_id`) UNIQUE KEY `uk_name_unique_id` (`group_name`, `unique_id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='重试表' ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='重试表'
; ;
@ -93,7 +94,9 @@ CREATE TABLE `retry_task_log`
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `idx_group_name_scene_name` (`group_name`, `scene_name`), KEY `idx_group_name_scene_name` (`group_name`, `scene_name`),
KEY `idx_retry_status` (`retry_status`), KEY `idx_retry_status` (`retry_status`),
KEY `idx_idempotent_id` (`idempotent_id`) KEY `idx_idempotent_id` (`idempotent_id`),
KEY `idx_unique_id` (`unique_id`),
KEY `idx_biz_no` (`biz_no`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='重试日志表' ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='重试日志表'
; ;

View File

@ -20,11 +20,9 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -173,7 +171,7 @@ public class SegmentIdGenerator implements IdGenerator, Lifecycle {
if (!buffer.isInitOk()) { if (!buffer.isInitOk()) {
try { try {
updateSegmentFromDb(key, buffer.getCurrent()); updateSegmentFromDb(key, buffer.getCurrent());
LogUtils.info(log, "Init buffer. Update leafkey {} {} from db", key, buffer.getCurrent()); LogUtils.info(log, "Init buffer. Update key {} {} from db", key, buffer.getCurrent());
buffer.setInitOk(true); buffer.setInitOk(true);
} catch (Exception e) { } catch (Exception e) {
LogUtils.warn(log, "Init buffer {} exception", buffer.getCurrent(), e); LogUtils.warn(log, "Init buffer {} exception", buffer.getCurrent(), e);
@ -293,7 +291,7 @@ public class SegmentIdGenerator implements IdGenerator, Lifecycle {
roll += 1; roll += 1;
if(roll > 10000) { if(roll > 10000) {
try { try {
TimeUnit.MILLISECONDS.sleep(2); TimeUnit.MILLISECONDS.sleep(20);
break; break;
} catch (InterruptedException e) { } catch (InterruptedException e) {
LogUtils.warn(log,"Thread {} Interrupted",Thread.currentThread().getName()); LogUtils.warn(log,"Thread {} Interrupted",Thread.currentThread().getName());

View File

@ -0,0 +1,60 @@
package com.aizuda.easy.retry.server.support.generator.id;
import com.aizuda.easy.retry.common.core.log.LogUtils;
import com.aizuda.easy.retry.server.exception.EasyRetryServerException;
import com.aizuda.easy.retry.server.support.generator.IdGenerator;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
/**
* 测试多线程情况下号段模式的运行情况
*
* @author: shuguang.zhang
* @date : 2023-05-06 09:16
* @since 1.2.0
*/
@SpringBootTest
@Slf4j
public class SegmentIdGeneratorTest {
@Autowired
@Qualifier("segmentIdGenerator")
private IdGenerator idGenerator;
@Test
public void idGeneratorTest() throws InterruptedException {
// step: 100, cpu: 4 memory: 16G, 线程1-150之间出现异常id:-3的情况较少
// 如果有特殊需求可以提高step 可通过系统配置: SystemProperties#step属性进行配置
Set<String> idSet = new HashSet<>();
int size = 500;
CountDownLatch count = new CountDownLatch(size);
for (int i = 0; i < size; i++) {
new Thread(new Runnable() {
@Override
public void run() {
count.countDown();
String id = idGenerator.idGenerator("example_group");
LogUtils.info(log, "id:[{}]", id);
if (Long.parseLong(id) < 0) {
throw new EasyRetryServerException("exception id");
} else if (idSet.contains(id)) {
throw new EasyRetryServerException("duplicate id [{}]", id);
} else {
idSet.add(id);
}
}
}).start();
}
count.await();
}
}

View File

@ -102,6 +102,10 @@ export default {
title: '分区', title: '分区',
dataIndex: 'groupPartition', dataIndex: 'groupPartition',
needTotal: true needTotal: true
},
{
title: 'ID生成模式',
dataIndex: 'idGeneratorModeName'
}, },
{ {
title: '更新时间', title: '更新时间',