2.7. Rabbitmq工作模式work工作模式

未匹配的标注

Work模式

  1. 消息产生者将消息放入队列消费者可以有多个,消费者1,消费者2,同时监听同一个队列,消息被消费?C1 C2共同争抢当前的消息队列内容,谁先拿到谁负责消费消息(隐患,高并发情况下,默认会产生某一个消息被多个消费者共同使用,可以设置一个开关(syncronize,与同步锁的性能不一样) 保证一条消息只能被一个消费者使用)
  2. 应用场景:红包;大项目中的资源调度(任务分配系统不需知道哪一个任务执行系统在空闲,直接将任务扔到消息队列中,空闲的系统自动争抢)

一个消息只能被一个消费者获取
Rabbitmq工作模式之work工作模式

当生产者生产消息的速度大于消费者消费的速度的时候就要考虑用work工作模式,因为这样能提高处理速度提高负载!
其实吧,work模式就是比simple模式多了一些消费者,以前simple模式只有一个消费者在消费,如果你弄多个消费者那就变成了work模式并且这多个工作者之间就会满足上边1,2所讲的规则
我们还是直接上代码吧:
rbtmqone.go(一个 rabbitmq 各种操作的工具类文件):
这个直接去取上一篇文章里面的代码即可,工具类都是保持不变的,一个字都没变化

workone.go文件 作为生产者:

//work模式下的生产者
package main

import (
   "fmt"
 "rbtmq/rbtmqcs" "strconv")

func main(){
   rabbitmq := rbtmqcs.NewRabbitMQSimple("queuetwo")
   for i:=0;i<=1000;i++ {
      //strconv.Itoa(i) 科普一下 可以将整形转换成字符串型的数字
  rabbitmq.PublishSimple("hello xiaobai" + strconv.Itoa(i))
      //time.Sleep(1 * time.Second)
  fmt.Println(i)
   }
}

workTwo.go作为消费者一

package main

import "rbtmq/rbtmqcs"

func main(){
   rabbitmq := rbtmqcs.NewRabbitMQSimple("queuetwo")
   rabbitmq.ConsumeSimple()
}

workThree.go作为消费者二

package main

import "rbtmq/rbtmqcs"

func main(){
   rabbitmq := rbtmqcs.NewRabbitMQSimple("queuetwo")
   rabbitmq.ConsumeSimple()
}

你还可以搞更多的消费者 代码都一样 消费者越多那么读取队列里面消息的速度也就越快
你会发现workTwo读的都是奇数 workThree读的都是偶数 这就验证了上边1,2当中讲到的原则!

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~