Multiple Job Queue provides an API to process jobs in asynchronous way. Also, it allows you to defer the processing of a time-consuming task and creates a number of workers to parallelize the execution of each job.
The routing package is just a common Go module. You can install it as any other Go module.
go get github.com/jorbriib/multiple-job-queueTo get more information just review the official Go blog regarding this topic.
This is just a quick introduction, view the GoDoc for details.
Basic usage example in a web server:
package main
import (
mjq "github.com/jorbriib/multiple-job-queue""fmt""log""net/http""time"
)
typeTestJobstruct {
}
func (tj*TestJob) Handle() {
time.Sleep(2*time.Second)
fmt.Println("Job handled")
}
funchandler(w http.ResponseWriter, r*http.Request) {
dispatcher:=mjq.GetDispatcher()
testJob1:=&TestJob{}
// Dispatch dispatches testJob1 to high queue_=dispatcher.Dispatch(testJob1, "high")
w.WriteHeader(200)
}
funcmain() {
// InitializeQueues creates a default queue with 1 worker_=mjq.InitializeQueues(1,
mjq.AddQueue("high", 4), // AddQueue creates a high queue with 4 workersmjq.AddQueue("medium", 2),
mjq.AddQueue("low", 1))
http.HandleFunc("/job", handler)
log.Fatal(http.ListenAndServe(":8080", nil))
}Basic usage example in a console command:
package main
import (
mjq "github.com/jorbriib/multiple-job-queue""math/rand"
)
funcmain() {
q:=mjq.InitializeQueues(0,
mjq.AddQueue("high", 5),
mjq.AddQueue("medium", 2),
mjq.AddQueue("low", 1))
queues:= []string{"high", "medium", "low"}
dispatcher:=mjq.GetDispatcher()
fori:=0; i<100; i++ {
randomQueue:=rand.Intn(len(queues))
testJob1:=&TestJob{}
_=dispatcher.Dispatch(testJob1, queues[randomQueue])
}
q.WaitUntilFinish()
}