55 "fmt"
66 "os"
77 "os/signal"
8- "strings"
98 "syscall"
109 "time"
1110
@@ -25,9 +24,19 @@ type Worker struct {
2524// Launch starts a new worker process. The worker subscribes
2625// to the default queue and processes incoming registered tasks
2726func (worker * Worker ) Launch () error {
27+ errorsChan := make (chan error )
28+
29+ worker .LaunchAsync (errorsChan )
30+
31+ return <- errorsChan
32+ }
33+
34+ // LaunchAsync is a non blocking version of Launch
35+ func (worker * Worker ) LaunchAsync (errorsChan chan <- error ) {
2836 cnf := worker .server .GetConfig ()
2937 broker := worker .server .GetBroker ()
3038
39+ // Log some useful information about woorker configuration
3140 log .INFO .Printf ("Launching a worker with the following settings:" )
3241 log .INFO .Printf ("- Broker: %s" , cnf .Broker )
3342 log .INFO .Printf ("- DefaultQueue: %s" , cnf .DefaultQueue )
@@ -40,11 +49,7 @@ func (worker *Worker) Launch() error {
4049 log .INFO .Printf (" - PrefetchCount: %d" , cnf .AMQP .PrefetchCount )
4150 }
4251
43- errorsChan := make (chan error )
44- sig := make (chan os.Signal , 1 )
45- signal .Notify (sig , os .Interrupt , syscall .SIGTERM )
46- var signalsReceived uint
47-
52+ // Goroutine to start broker consumption and handle retries when broker connection dies
4853 go func () {
4954 for {
5055 retry , err := broker .StartConsuming (worker .ConsumerTag , worker .Concurrency , worker )
@@ -58,6 +63,11 @@ func (worker *Worker) Launch() error {
5863 }
5964 }()
6065
66+ sig := make (chan os.Signal , 1 )
67+ signal .Notify (sig , os .Interrupt , syscall .SIGTERM )
68+ var signalsReceived uint
69+
70+ // Goroutine Handle SIGINT and SIGTERM signals
6171 go func () {
6272 for {
6373 select {
@@ -79,8 +89,6 @@ func (worker *Worker) Launch() error {
7989 }
8090 }
8191 }()
82-
83- return <- errorsChan
8492}
8593
8694// Quit tears down the running worker process
@@ -166,11 +174,15 @@ func (worker *Worker) taskSucceeded(signature *tasks.Signature, taskResults []*t
166174 return fmt .Errorf ("Set state success error: %s" , err )
167175 }
168176
169- debugResults := make ([]string , len (taskResults ))
170- for i , taskResult := range taskResults {
171- debugResults [i ] = fmt .Sprintf ("%v" , taskResult .Value )
177+ // Log human readable results of the processed task
178+ var debugResults = "[]"
179+ results , err := tasks .ReflectTaskResults (taskResults )
180+ if err != nil {
181+ log .WARNING .Print (err )
182+ } else {
183+ debugResults = tasks .HumanReadableResults (results )
172184 }
173- log .INFO .Printf ("Processed task %s. Results = [%v] " , signature .UUID , strings . Join ( debugResults , ", " ) )
185+ log .INFO .Printf ("Processed task %s. Results = %s " , signature .UUID , debugResults )
174186
175187 // Trigger success callbacks
176188
0 commit comments