NSQ 源码分析之NSQD--queueScanLoop

今天主要讲的是 NSQD中 queueScanLoop代码实现,这个函数的作用是用来维护 channel 中的延时队列和等待消费确认队列。将超时的消息重新加入消费队列中。主要代码文件:1.nsqd/nsqd.goqueueScanLoop 函数在 Main函数中启动 n.waitGroup.Wrap(n.queueScanLoop)func (n *NSQD) queue...
摘要由CSDN通过智能技术生成

今天主要讲的是 NSQD 中 queueScanLoop代码实现,这个函数的作用是用来维护 channel 中的延时队列和等待消费确认队列。将超时的消息重新加入消费队列中。

主要代码文件:

1.nsqd/nsqd.go

queueScanLoop  函数在 Main 函数中启动  n.waitGroup.Wrap(n.queueScanLoop)

func (n *NSQD) queueScanLoop() {
    //传递需要处理的 channel
	workCh := make(chan *Channel, n.getOpts().QueueScanSelectionCount)
	responseCh := make(chan bool, n.getOpts().QueueScanSelectionCount) 
	closeCh := make(chan int)
    
    //定时执行 loop 的间隔时间
	workTicker := time.NewTicker(n.getOpts().QueueScanInterval)
	//goroutine 池维护时间
    refreshTicker := time.NewTicker(n.getOpts().QueueScanRefreshInterval)

	channels := n.channels() //获取当前nsqd 中所有的channels
    //goroutine 池任务处理和维护
	n.resizePool(len(channels), workCh, responseCh, closeCh)

	for {
		select {
		case <-workTicker.C:
			if len(channels) == 0 {
				continue
			}
		case <-refreshTicker.C:
			channels = n.channels()
			n.resizePool(len(channels), w
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值