首页 > 其他分享 >可靠的延迟队列

可靠的延迟队列

时间:2022-10-12 08:56:02浏览次数:52  
标签:return nil err 队列 ids 可靠 fetchLimit idStr 延迟

已到时间的消息转移到 ready
	err := q.pending2Ready()
	if err != nil {
		return err
	}
	// 循环调用 ready2Unack 拉取消息进行消费
	ids := make([]string, 0, q.fetchLimit)
	for {
		idStr, err := q.ready2Unack()
		if err == redis.Nil { // consumed all
			break
		}
		if err != nil {
			return err
		}
		ids = append(ids, idStr)
		if q.fetchLimit > 0 && len(ids) >= int(q.fetchLimit) {
			break
		}
	}
	if len(ids) > 0 {
		q.batchCallback(ids)
	}
	// 将 nack 或超时的消息放入重试队列
	err = q.unack2Retry()
	if err != nil {
		return err
	}
    // 清理已达到最大重试次数的消息
	err = q.garbageCollect()
	if err != nil {
		return err
	}
	// 消费重试队列
	ids = make([]string, 0, q.fetchLimit)
	for {
		idStr, err := q.retry2Unack()
		if err == redis.Nil { // consumed all
			break
		}
		if err != nil {
			return err
		}
		ids = append(ids, idStr)
		if q.fetchLimit > 0 && len(ids) >= int(q.fetchLimit) {
			break
		}
	}
	if len(ids) > 0 {
		q.batchCallback(ids)
	}
	return nil
}

至此一个简单可靠的延时队列就做好了,现在就开始试用吧

标签:return,nil,err,队列,ids,可靠,fetchLimit,idStr,延迟
From: https://www.cnblogs.com/Leo_wl/p/16783264.html

相关文章

  • 阻塞队列详解
    什么是阻塞队列【1】阻塞队列:从定义上来说是队列的一种,那么肯定是一个先进先出(FIFO)的数据结构。与普通队列不同的是,它支持两个附加操作,即阻塞添加和阻塞删除方法。......
  • 阿里云openservices rocketmq消息队列消费消息底层源码分析
    mq消费源码依赖<dependency><groupId>com.aliyun.openservices</groupId><artifactId>ons-client</artifactId></dependency>阿里云rocke......
  • 阻塞队列&线程池
    前言阻塞队列是线程池的基础。两者都是面试热点,尤其是线程池。所以我特地花时间学习了一下这方面的知识,并做记录。一.阻塞队列这个其实用的非常多。安卓里面​​Handler​......
  • 通关数据结构 day_05 -- 单调队列
    单调队列经典应用:滑动窗口里的最大值/最小值举例假设有序列:13-1-35367第一次滑动窗口是 【1 3 -1】最小值是-1第二次滑动窗口是 【3 -1 -3】最小值是-3以......
  • Java实现队列
    队列是典型的FIFO数据结构。入队(队尾添加),出队(队首删除)。定义队列接口publicinterfaceQueue<T>{booleanenQueue(Tt);TdeQueue();intsize();}......
  • 数据结构基础—栈和队列
    数据结构基础—栈和队列一、栈和队列的基本概念和性质栈和队列都是特殊的线性表对他们的操作有着规定和限制:在插入和删除时只能对某一端操作栈:只能在一端进行(先进后......
  • springboot高级——消息队列相关
    写在前边:本文学习尚硅谷的springboot高级整理笔记。消息队列是什么,有什么好处?通过异步处理提高系统性能和削峰、降低系统耦合性。目前使用较多的消息队ActiveMQ,RabbitMQ,Kafk......
  • 队列的美
    这样,无论生产者,还是消费者,他们不需要直接认识或者沟通,给并发带来了方便。 之后,扩充消费者,或者增加生产者,对整个系统都不会有大的改动。因为他们都是基于这条队列。 ......
  • 创建消息队列
    #include<stdio.h>#include<fcntl.h>#include<errno.h>#include<string.h>#include<stdlib.h>#include<unistd.h>#include<mqueue.h>structmq_attrattr;......
  • 数据结构 3 栈和队列
    栈和队列也算是数据类型。以为都是在首位操作,栈和队列克服了线性表添加删除需要移动大量元素的弱点。栈仅在尾部进行插入和删除,尾部叫做栈顶,表头叫做栈底。后进先出。......