chore(queue): Shutdown service once. (#610)
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
This commit is contained in:
		
							parent
							
								
									d9947ea44d
								
							
						
					
					
						commit
						6ebbbe5026
					
				| 
						 | 
				
			
			@ -38,6 +38,8 @@ func TestShutdown(t *testing.T) {
 | 
			
		|||
	q.Start()
 | 
			
		||||
	time.Sleep(1 * time.Second)
 | 
			
		||||
	q.Shutdown()
 | 
			
		||||
	// check shutdown once
 | 
			
		||||
	q.Shutdown()
 | 
			
		||||
	q.Wait()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@ package queue
 | 
			
		|||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"sync"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type (
 | 
			
		||||
| 
						 | 
				
			
			@ -13,6 +14,7 @@ type (
 | 
			
		|||
		routineGroup *routineGroup
 | 
			
		||||
		quit         chan struct{}
 | 
			
		||||
		worker       Worker
 | 
			
		||||
		stopOnce     sync.Once
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -82,8 +84,10 @@ func (q *Queue) Start() {
 | 
			
		|||
 | 
			
		||||
// Shutdown stops all queues.
 | 
			
		||||
func (q *Queue) Shutdown() {
 | 
			
		||||
	q.worker.Shutdown()
 | 
			
		||||
	close(q.quit)
 | 
			
		||||
	q.stopOnce.Do(func() {
 | 
			
		||||
		q.worker.Shutdown()
 | 
			
		||||
		close(q.quit)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Wait all process
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -76,3 +76,23 @@ func TestCustomFuncAndWait(t *testing.T) {
 | 
			
		|||
	q.Wait()
 | 
			
		||||
	// you will see the execute time > 1000ms
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestShutDonwPanic(t *testing.T) {
 | 
			
		||||
	w := NewWorker(
 | 
			
		||||
		WithRunFunc(func(msg queue.QueuedMessage) error {
 | 
			
		||||
			logx.LogAccess.Infof("get message: %s", msg.Bytes())
 | 
			
		||||
			time.Sleep(100 * time.Millisecond)
 | 
			
		||||
			return nil
 | 
			
		||||
		}),
 | 
			
		||||
	)
 | 
			
		||||
	q, err := queue.NewQueue(
 | 
			
		||||
		queue.WithWorker(w),
 | 
			
		||||
		queue.WithWorkerCount(2),
 | 
			
		||||
	)
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
	q.Start()
 | 
			
		||||
	q.Shutdown()
 | 
			
		||||
	// check shutdown once
 | 
			
		||||
	q.Shutdown()
 | 
			
		||||
	q.Wait()
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue