golang实现rabbitmq之work模式
上一篇介绍了golang实现rabbitmq之simple模式当你弄懂了这个最简单的simple模式后也便可以往后看了。后面的四 种模式全部都是基于这个模式上做的优化或者说是修改。第二种模式:work模式。
那么到此,可能就会有同学有疑问了,为什么我的输出结果里要加一个“(或者Work)”呢?因为其实simple模式和work模式其实用的是一套逻辑代码,只是work模式是可以有多个消费者的,work模式起到一个负载均衡的作用。
那么,我们来看一下work模式的发布者:
package main import ( "fmt" "rabbitmq20181121/RabbitMq" "strconv" "time" ) func main() { rabbitmq := RabbitMq.NewRabbitMQSimple("duQueueName191224") for i := 0; i < 100; i++ { rabbitmq.PublishSimple("hello du message" + strconv.Itoa(i) + "---来自work模式") time.Sleep(1 * time.Second) fmt.Printf("work模式,共产生了%d条消息\n", i) } }
work模式的消费者,建立2个,代码都是一样的:
package main import "rabbitmq20181121/RabbitMq" func main() { rabbitmq := RabbitMq.NewRabbitMQSimple("duQueueName191224") rabbitmq.ConsumeSimple() }
将work的发布者和两个消费者run起来,会发现:
小杜同学写的Simple(或者Work)模式接收到了消息:hello du message1---来自work模式 小杜同学写的Simple(或者Work)模式接收到了消息:hello du message3---来自work模式 小杜同学写的Simple(或者Work)模式接收到了消息:hello du message5---来自work模式 小杜同学写的Simple(或者Work)模式接收到了消息:hello du message7---来自work模式 小杜同学写的Simple(或者Work)模式接收到了消息:hello du message9---来自work模式 小杜同学写的Simple(或者Work)模式接收到了消息:hello du message11---来自work模式
也就是一个消费者只消费奇数,而另外一个则只消费偶数。那么work模式就也成功了。