2.7. Rabbitmq工作模式work工作模式
Work 模式#
- 消息产生者将消息放入队列消费者可以有多个,消费者 1, 消费者 2, 同时监听同一个队列,消息被消费?C1 C2 共同争抢当前的消息队列内容,谁先拿到谁负责消费消息 (隐患,高并发情况下,默认会产生某一个消息被多个消费者共同使用,可以设置一个开关 (syncronize, 与同步锁的性能不一样) 保证一条消息只能被一个消费者使用)
- 应用场景:红包;大项目中的资源调度 (任务分配系统不需知道哪一个任务执行系统在空闲,直接将任务扔到消息队列中,空闲的系统自动争抢)
一个消息只能被一个消费者获取
当生产者生产消息的速度大于消费者消费的速度的时候就要考虑用 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 当中讲到的原则!
推荐文章: