Kline-x

Results 18 comments of Kline-x

> ![image](https://user-images.githubusercontent.com/9114492/102870972-c235c480-4478-11eb-8d60-e5bda1453bd3.png) > > 亲手实验。没有问题 为什么不用指定结构体类型?比如这样: sPtrs := map[int]*S{1: &S{"A"}}

> 省略写法。他的重点不在构造,在于后边的调用。 好的,谢谢解答

还有,run方法里的: ``` if queue.Async { gopool.Submit(fn) } else { fn() } ``` 在worker端貌似根本没得设置queue.Async,所以worker端的Run永远不会异步跑?

> 在 `queue.go` 里有: > > ```go > func WithAsyncHandleTask(async bool) QueueOption { > return func(q *Queue) { > q.Async = async > } > } > ``` 但是您gotasks.Run是传queueName进去new了一个默认的queue啊,默认的queue中async是false,而run也是在gotasks.Run里面跑的,等于在跑gotasks.Run的时候async一直是false

> `for i, handler := range handlers` 这里i就在不断的变大,`task.CurrentHandlerIndex = i` 赋值,`broker.Update(task)` 保存到redis。 > > 重试的时候,如果一共三个handler,1成功,2失败。那么1就会保存到redis里,重试任务的时候就会直接从2开始。 ``` reentrantMapLock.RLock() reentrantOptions, ok := reentrantMap[handlerName] reentrantMapLock.RUnlock() for j := 0; j < reentrantOptions.MaxTimes; j++...

> Queue这个好像是个bug,我基本都是用同步的。应该要把选项改到worker上来才对。 赞同

> 不是这个重试。是指重新入队,再次消费的时候。不过我不记得有没有加这个逻辑了 是handleTask里的这段吗? ``` defer func() { r := recover() status := "success" if r != nil { status = "fail" task.ResultLog = string(debug.Stack()) broker.Update(task) log.Printf("recovered from queue %s and...

> 对的 但是这里task.QueueName = FatalQueueName,队列名字已经换了呀,下次是取不出来错误的这条吧?

> 可以代码重新入队 入的已经不是原来的队了呀,是fatal队列

> 目前失败的是直接当dead letter了。没有做这个功能。欢迎PR ``` if r != nil { broker.Enqueue(task) // save to fatal queue task.QueueName = FatalQueueName broker.Enqueue(task) } ``` 这样是不是就可以了?