chore: support custom parameter in queue (#608)
* chore: support custom parameter in queue Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
This commit is contained in:
parent
66923789ff
commit
ce6e87639a
8
main.go
8
main.go
|
@ -329,7 +329,13 @@ func main() {
|
||||||
logx.LogError.Fatalf("we don't support queue engine: %s", cfg.Queue.Engine)
|
logx.LogError.Fatalf("we don't support queue engine: %s", cfg.Queue.Engine)
|
||||||
}
|
}
|
||||||
|
|
||||||
q := queue.NewQueue(w, int(cfg.Core.WorkerNum))
|
q, err := queue.NewQueue(
|
||||||
|
queue.WithWorker(w),
|
||||||
|
queue.WithWorkerCount(int(cfg.Core.WorkerNum)),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
logx.LogError.Fatal(err)
|
||||||
|
}
|
||||||
q.Start()
|
q.Start()
|
||||||
|
|
||||||
finished := make(chan struct{})
|
finished := make(chan struct{})
|
||||||
|
|
|
@ -6,7 +6,9 @@ import (
|
||||||
|
|
||||||
"github.com/appleboy/gorush/logx"
|
"github.com/appleboy/gorush/logx"
|
||||||
"github.com/appleboy/gorush/queue"
|
"github.com/appleboy/gorush/queue"
|
||||||
|
|
||||||
"github.com/nsqio/go-nsq"
|
"github.com/nsqio/go-nsq"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
var host = "nsq"
|
var host = "nsq"
|
||||||
|
@ -28,7 +30,11 @@ func TestShutdown(t *testing.T) {
|
||||||
WithAddr(host+":4150"),
|
WithAddr(host+":4150"),
|
||||||
WithTopic("test"),
|
WithTopic("test"),
|
||||||
)
|
)
|
||||||
q := queue.NewQueue(w, 2)
|
q, err := queue.NewQueue(
|
||||||
|
queue.WithWorker(w),
|
||||||
|
queue.WithWorkerCount(2),
|
||||||
|
)
|
||||||
|
assert.NoError(t, err)
|
||||||
q.Start()
|
q.Start()
|
||||||
time.Sleep(1 * time.Second)
|
time.Sleep(1 * time.Second)
|
||||||
q.Shutdown()
|
q.Shutdown()
|
||||||
|
@ -49,7 +55,11 @@ func TestCustomFuncAndWait(t *testing.T) {
|
||||||
return nil
|
return nil
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
q := queue.NewQueue(w, 2)
|
q, err := queue.NewQueue(
|
||||||
|
queue.WithWorker(w),
|
||||||
|
queue.WithWorkerCount(2),
|
||||||
|
)
|
||||||
|
assert.NoError(t, err)
|
||||||
q.Start()
|
q.Start()
|
||||||
time.Sleep(100 * time.Millisecond)
|
time.Sleep(100 * time.Millisecond)
|
||||||
q.Queue(m)
|
q.Queue(m)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package queue
|
package queue
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"runtime"
|
"runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -15,21 +16,53 @@ type (
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Option for queue system
|
||||||
|
type Option func(*Queue)
|
||||||
|
|
||||||
|
// ErrMissingWorker missing define worker
|
||||||
|
var ErrMissingWorker = errors.New("missing worker module")
|
||||||
|
|
||||||
|
// WithWorkerCount set worker count
|
||||||
|
func WithWorkerCount(num int) Option {
|
||||||
|
return func(q *Queue) {
|
||||||
|
q.workerCount = num
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithLogger set custom logger
|
||||||
|
func WithLogger(l Logger) Option {
|
||||||
|
return func(q *Queue) {
|
||||||
|
q.logger = l
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithWorker set custom worker
|
||||||
|
func WithWorker(w Worker) Option {
|
||||||
|
return func(q *Queue) {
|
||||||
|
q.worker = w
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// NewQueue returns a Queue.
|
// NewQueue returns a Queue.
|
||||||
func NewQueue(w Worker, workerNum int) *Queue {
|
func NewQueue(opts ...Option) (*Queue, error) {
|
||||||
q := &Queue{
|
q := &Queue{
|
||||||
workerCount: runtime.NumCPU(),
|
workerCount: runtime.NumCPU(),
|
||||||
routineGroup: newRoutineGroup(),
|
routineGroup: newRoutineGroup(),
|
||||||
quit: make(chan struct{}),
|
quit: make(chan struct{}),
|
||||||
worker: w,
|
|
||||||
logger: new(defaultLogger),
|
logger: new(defaultLogger),
|
||||||
}
|
}
|
||||||
|
|
||||||
if workerNum > 0 {
|
// Loop through each option
|
||||||
q.workerCount = workerNum
|
for _, opt := range opts {
|
||||||
|
// Call the option giving the instantiated
|
||||||
|
opt(q)
|
||||||
}
|
}
|
||||||
|
|
||||||
return q
|
if q.worker == nil {
|
||||||
|
return nil, ErrMissingWorker
|
||||||
|
}
|
||||||
|
|
||||||
|
return q, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Capacity for queue max size
|
// Capacity for queue max size
|
||||||
|
|
|
@ -60,7 +60,11 @@ func TestCustomFuncAndWait(t *testing.T) {
|
||||||
return nil
|
return nil
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
q := queue.NewQueue(w, 2)
|
q, err := queue.NewQueue(
|
||||||
|
queue.WithWorker(w),
|
||||||
|
queue.WithWorkerCount(2),
|
||||||
|
)
|
||||||
|
assert.NoError(t, err)
|
||||||
q.Start()
|
q.Start()
|
||||||
time.Sleep(100 * time.Millisecond)
|
time.Sleep(100 * time.Millisecond)
|
||||||
q.Queue(m)
|
q.Queue(m)
|
||||||
|
|
|
@ -37,7 +37,10 @@ func TestMain(m *testing.M) {
|
||||||
}
|
}
|
||||||
|
|
||||||
w = simple.NewWorker()
|
w = simple.NewWorker()
|
||||||
q = queue.NewQueue(w, 4)
|
q, _ = queue.NewQueue(
|
||||||
|
queue.WithWorker(w),
|
||||||
|
queue.WithWorkerCount(4),
|
||||||
|
)
|
||||||
q.Start()
|
q.Start()
|
||||||
defer func() {
|
defer func() {
|
||||||
q.Shutdown()
|
q.Shutdown()
|
||||||
|
|
Loading…
Reference in New Issue