fix(NSQ): close service after waiting all job completed. (#601)
This commit is contained in:
parent
87be86be08
commit
d6b4a0ae39
|
@ -80,6 +80,11 @@ services:
|
|||
- name: redis
|
||||
image: redis
|
||||
|
||||
- name: nsq
|
||||
image: nsqio/nsq
|
||||
commands:
|
||||
- /nsqd
|
||||
|
||||
volumes:
|
||||
- name: gopath
|
||||
temp: {}
|
||||
|
|
|
@ -36,3 +36,4 @@ custom
|
|||
release
|
||||
coverage.txt
|
||||
node_modules
|
||||
config.yml
|
||||
|
|
|
@ -118,6 +118,13 @@
|
|||
name: 'redis',
|
||||
image: 'redis',
|
||||
},
|
||||
{
|
||||
name: 'nsq',
|
||||
image: 'nsqio/nsq',
|
||||
commands: [
|
||||
"/nsqd",
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
|
|
|
@ -98,7 +98,10 @@ func (s *Worker) AfterRun() error {
|
|||
|
||||
// Run start the worker
|
||||
func (s *Worker) Run(quit chan struct{}) error {
|
||||
wg := &sync.WaitGroup{}
|
||||
s.q.AddHandler(nsq.HandlerFunc(func(msg *nsq.Message) error {
|
||||
wg.Add(1)
|
||||
defer wg.Done()
|
||||
var notification gorush.PushNotification
|
||||
if err := json.Unmarshal(msg.Body, ¬ification); err != nil {
|
||||
return err
|
||||
|
@ -110,6 +113,8 @@ func (s *Worker) Run(quit chan struct{}) error {
|
|||
select {
|
||||
case <-quit:
|
||||
}
|
||||
|
||||
wg.Wait()
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
package nsq
|
||||
|
||||
import (
|
||||
"log"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/appleboy/gorush/logx"
|
||||
"github.com/appleboy/gorush/queue"
|
||||
)
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
if err := logx.InitLog(
|
||||
"debug",
|
||||
"stdout",
|
||||
"debug",
|
||||
"stdout",
|
||||
); err != nil {
|
||||
log.Fatalf("Can't load log module, error: %v", err)
|
||||
}
|
||||
|
||||
m.Run()
|
||||
}
|
||||
|
||||
func TestShutdown(t *testing.T) {
|
||||
w := NewWorker(
|
||||
WithAddr("nsq:4150"),
|
||||
WithTopic("test"),
|
||||
)
|
||||
q := queue.NewQueue(w, 2)
|
||||
q.Start()
|
||||
time.Sleep(1 * time.Second)
|
||||
q.Shutdown()
|
||||
}
|
|
@ -64,7 +64,9 @@ func (q *Queue) Queue(job interface{}) error {
|
|||
}
|
||||
|
||||
func (q *Queue) work(num int) {
|
||||
q.worker.BeforeRun()
|
||||
if err := q.worker.BeforeRun(); err != nil {
|
||||
logx.LogError.Fatal(err)
|
||||
}
|
||||
q.routineGroup.Run(func() {
|
||||
// to handle panic cases from inside the worker
|
||||
// in such case, we start a new goroutine
|
||||
|
@ -79,7 +81,9 @@ func (q *Queue) work(num int) {
|
|||
q.worker.Run(q.quit)
|
||||
logx.LogAccess.Info("closed the worker num ", num)
|
||||
})
|
||||
q.worker.AfterRun()
|
||||
if err := q.worker.AfterRun(); err != nil {
|
||||
logx.LogError.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func (q *Queue) startWorker() {
|
||||
|
|
Loading…
Reference in New Issue