49 lines
906 B
Go
49 lines
906 B
Go
//
|
|
// Task sink - design 2.
|
|
// Adds pub-sub flow to send kill signal to workers
|
|
//
|
|
|
|
package main
|
|
|
|
import (
|
|
zmq "github.com/pebbe/zmq4"
|
|
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
func main() {
|
|
// Socket to receive messages on
|
|
receiver, _ := zmq.NewSocket(zmq.PULL)
|
|
defer receiver.Close()
|
|
receiver.Bind("tcp://*:5558")
|
|
|
|
// Socket for worker control
|
|
controller, _ := zmq.NewSocket(zmq.PUB)
|
|
defer controller.Close()
|
|
controller.Bind("tcp://*:5559")
|
|
|
|
// Wait for start of batch
|
|
receiver.Recv(0)
|
|
|
|
// Start our clock now
|
|
start_time := time.Now()
|
|
|
|
// Process 100 confirmations
|
|
for task_nbr := 0; task_nbr < 100; task_nbr++ {
|
|
receiver.Recv(0)
|
|
if task_nbr%10 == 0 {
|
|
fmt.Print(":")
|
|
} else {
|
|
fmt.Print(".")
|
|
}
|
|
}
|
|
fmt.Println("\nTotal elapsed time:", time.Since(start_time))
|
|
|
|
// Send kill signal to workers
|
|
controller.Send("KILL", 0)
|
|
|
|
// Finished
|
|
time.Sleep(time.Second) // Give 0MQ time to deliver
|
|
}
|