模式图

image.png

场景

我们将创建一个工作队列(Work Queue),它会发送一些耗时的任务给多个工作者(Worker)。
工作队列(又称:任务队列——Task Queues)是为了避免等待一些占用大量资源、时间的操作。当我们把任务(Task)当作消息发送到队列中,一个运行在后台的工作者(worker)进程就会取出任务然后处理。当你运行多个工作者(workers),任务就会在它们之间共享。
当生产者生产速度大于消费者消费速度,将任务分发给多个消费者,提高系统处理任务能力,起到了负载的作用。

实现

work模式和simple模式相比,简单情况下,只是多了消费者。
生产者

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/WenkeZhou/flash-sale/pkg/rabbitmq"
  5. "strconv"
  6. "time"
  7. )
  8. func main() {
  9. rmq := rabbitmq.NewRabbitMQSimple("simple_work_queue")
  10. for i:=1; i<=100; i++ {
  11. rmq.PublishSimple("message:" + strconv.Itoa(i))
  12. time.Sleep(1 * time.Second)
  13. fmt.Println(i)
  14. }
  15. }

消费者

  1. package main
  2. import (
  3. "github.com/WenkeZhou/flash-sale/pkg/rabbitmq"
  4. )
  5. func main() {
  6. rmq := rabbitmq.NewRabbitMQSimple("simple_work_queue")
  7. rmq.ConsumeSimple()
  8. }