模式图
场景
我们将创建一个工作队列(Work Queue),它会发送一些耗时的任务给多个工作者(Worker)。
工作队列(又称:任务队列——Task Queues)是为了避免等待一些占用大量资源、时间的操作。当我们把任务(Task)当作消息发送到队列中,一个运行在后台的工作者(worker)进程就会取出任务然后处理。当你运行多个工作者(workers),任务就会在它们之间共享。
当生产者生产速度大于消费者消费速度,将任务分发给多个消费者,提高系统处理任务能力,起到了负载的作用。
实现
work模式和simple模式相比,简单情况下,只是多了消费者。
生产者
package main
import (
"fmt"
"github.com/WenkeZhou/flash-sale/pkg/rabbitmq"
"strconv"
"time"
)
func main() {
rmq := rabbitmq.NewRabbitMQSimple("simple_work_queue")
for i:=1; i<=100; i++ {
rmq.PublishSimple("message:" + strconv.Itoa(i))
time.Sleep(1 * time.Second)
fmt.Println(i)
}
}
消费者
package main
import (
"github.com/WenkeZhou/flash-sale/pkg/rabbitmq"
)
func main() {
rmq := rabbitmq.NewRabbitMQSimple("simple_work_queue")
rmq.ConsumeSimple()
}