{"id":30175406,"url":"https://github.com/brick-team/redis-delay-queue","last_synced_at":"2026-05-17T17:32:49.296Z","repository":{"id":99099192,"uuid":"392875303","full_name":"brick-team/redis-delay-queue","owner":"brick-team","description":"基于redis延迟队列","archived":false,"fork":false,"pushed_at":"2021-10-12T14:43:55.000Z","size":66,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-12T01:38:15.201Z","etag":null,"topics":["delay-queue","queue","redis"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/brick-team.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-08-05T02:07:27.000Z","updated_at":"2022-04-25T00:45:03.000Z","dependencies_parsed_at":"2023-06-03T19:30:40.213Z","dependency_job_id":null,"html_url":"https://github.com/brick-team/redis-delay-queue","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/brick-team/redis-delay-queue","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brick-team%2Fredis-delay-queue","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brick-team%2Fredis-delay-queue/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brick-team%2Fredis-delay-queue/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brick-team%2Fredis-delay-queue/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brick-team","download_url":"https://codeload.github.com/brick-team/redis-delay-queue/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brick-team%2Fredis-delay-queue/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33147514,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T09:28:26.183Z","status":"ssl_error","status_checked_at":"2026-05-17T09:27:52.702Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["delay-queue","queue","redis"],"created_at":"2025-08-12T01:35:52.463Z","updated_at":"2026-05-17T17:32:49.287Z","avatar_url":"https://github.com/brick-team.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Redis Delay Queue\n\n基于redis的延迟队列，技术参考[有赞延迟队列](https://tech.youzan.com/queuing_delay/)\n\n## 插件版使用说明\n\n引入`redis-delay-queue-plugin`依赖，具体依赖如下\n\n```\n\u003cdependency\u003e\n   \u003cgroupId\u003ecom.github.huifer\u003c/groupId\u003e\n   \u003cartifactId\u003eembedded\u003c/artifactId\u003e\n   \u003cversion\u003e1.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n实现`com.github.huifer.delay.queue.plugin.service.TaskWorker`接口，在TaskWorker中有三个方法\n\n1. 方法invoke用于编写具体的执行逻辑，其中方法参数来源是`com.github.huifer.delay.queue.plugin.domain.DelayQueueJob#params`\n2. 方法type用于表示任务类型，该数据需要和`com.github.huifer.delay.queue.plugin.domain.DelayQueueJob#taskType`对应\n3. 方法clazz用于表示处理类的类。\n\n测试用代码如下\n\n```\n@Service\n@Slf4j\npublic class Task1 implements TaskWorker {\n   @Override\n   public void invoke(String message) {\n      log.info(\"message = [{}]\", message);\n   }\n\n   @Override\n   public String type() {\n      return \"task1\";\n   }\n\n   @Override\n   public Class\u003c?\u003e clazz() {\n      return Task2.class;\n   }\n}\n\n@Slf4j\n@Service\npublic class Task2 implements TaskWorker {\n\t@Override\n\tpublic void invoke(String message) {\n\t\tlog.info(\"message = [{}]\", message);\n\t}\n\n\t@Override\n\tpublic String type() {\n\t\treturn \"task2\";\n\t}\n\n\t@Override\n\tpublic Class\u003c?\u003e clazz() {\n\t\treturn Task2.class;\n\t}\n}\n\n@Slf4j\n@Service\npublic class Task2Copy implements TaskWorker {\n\t@Override\n\tpublic void invoke(String message) {\n\t\tlog.info(\"message=[{}]\", message);\n\t}\n\n\t@Override\n\tpublic String type() {\n\t\treturn \"task2\";\n\t}\n\n\t@Override\n\tpublic Class\u003c?\u003e clazz() {\n\t\treturn Task2Copy.class;\n\t}\n}\n```\n\n实现AbstractTaskRegister接口具体实现的是run方法，在run方法中需要设置线程数量以及注册任务处理器，演示代码如下\n\n```java\n@Component\npublic class TaskRunner extends AbstractTaskRegister {\n   public TaskRunner(DelayBucketService bucketService, DelayQueuePoolService poolService, RedisLockServiceImpl redisLockHelper, LogService logService) {\n      super(bucketService, poolService, redisLockHelper, logService);\n   }\n\n   @Override\n   public void run(ApplicationArguments args) throws Exception {\n      this.setThreads(10);\n      this.register(\"task1\", 1);\n      this.register(\"task2\", 1);\n   }\n}\n```\n\n提交延迟队列任务，具体需要使用`com.github.huifer.delay.queue.plugin.service.TaskSubmitService`，演示代码如下\n\n```java\n@RestController\n@RequestMapping(\"/job\")\npublic class JobCtr {\n   final TaskSubmitService taskSubmitService;\n\n   public JobCtr(TaskSubmitService taskSubmitService) {\n      this.taskSubmitService = taskSubmitService;\n   }\n\n   @GetMapping(\"/add\")\n   public void addJob(@RequestBody DelayQueueJob delayQueueJobEntity) {\n      this.taskSubmitService.submitTask(delayQueueJobEntity);\n   }\n}\n```\n\n在上述测试用例中定义了两个任务类型:`task1`和`task2`，通过`/job/add`接口提交一个延迟任务，具体提交测试请求用例如下\n\n```http\nGET http://localhost:9024/job/add\nContent-Type: application/json\n\n{\n  \"taskId\": \"123\",\n  \"taskType\": \"task2\",\n  \"delayTime\": \"1628146026000\",\n  \"params\": \"啊啊啊啊啊啊啊啊啊\"\n}\n```\n\n发送后由于`delayTime`的时间小于当前时间会直接执行，执行效果如下\n\n```\n2021-08-06 13:41:56.626  INFO 17852 --- [pool-1-thread-2] c.g.h.d.q.p.service.DelayBucketHandler   : 执行任务, dt = [DelayQueueJob{taskId='123', taskType='task2', delayTime=1628146026000, params='啊啊啊啊啊啊啊啊啊'}]\n2021-08-06 13:41:56.668  INFO 17852 --- [pool-1-thread-2] c.g.h.d.queue.example.sb.service.Task2   : message = [啊啊啊啊啊啊啊啊啊]\n2021-08-06 13:41:56.668  INFO 17852 --- [pool-1-thread-2] c.g.h.d.q.p.service.DelayBucketHandler   : 任务执行成功,任务类型=[task2],任务id=[task2],执行类是=[class com.github.huifer.delay.queue.example.sb.service.Task2],执行参数是=[啊啊啊啊啊啊啊啊啊]\n2021-08-06 13:41:56.679  INFO 17852 --- [pool-1-thread-2] c.g.h.d.q.example.sb.service.Task2Copy   : message=[啊啊啊啊啊啊啊啊啊]\n2021-08-06 13:41:56.680  INFO 17852 --- [pool-1-thread-2] c.g.h.d.q.p.service.DelayBucketHandler   : 任务执行成功,任务类型=[task2],任务id=[task2],执行类是=[class com.github.huifer.delay.queue.example.sb.service.Task2Copy],执行参数是=[啊啊啊啊啊啊啊啊啊]\n\n```\n\n**注意：插件版本的底层基于线程死循环，允许配置间隔时间建议间隔时间设置1秒**\n\n\n\n\n\n## Spring Cloud Eureka 版本接入\n\n添加pom依赖\n\n```xml\n\u003cdependency\u003e\n   \u003cgroupId\u003ecom.github.huifer\u003c/groupId\u003e\n   \u003cartifactId\u003eembedded-web\u003c/artifactId\u003e\n   \u003cversion\u003e1.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n修改配置文件，总共注意两项：\n\n1. 添加**`spring.application.name`**。\n2. 添加**`delay-queue.center-url`**，该数据为admin项目的url地址。\n\n实现`com.github.huifer.delay.queue.plugin.web.TaskWorker`接口，在TaskWorker中有三个方法\n\n1. 方法invoke用于编写具体的执行逻辑。\n2. 方法type用于表示任务类型。\n3. 方法clazz用于表示处理类的类。\n\n任务提交通过`com.github.huifer.delay.queue.plugin.web.TaskSubmitService`进行提交\n\n**注意：使用eureka版本需要首先启动admin工程**","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrick-team%2Fredis-delay-queue","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrick-team%2Fredis-delay-queue","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrick-team%2Fredis-delay-queue/lists"}