RabbitMQ工作模式–Publish模式
简介
消息被路由投递给多个队列,一个消息被多个消费者获取。下面是Publish模式的结构图
![image]()
从图中我们可以发现:1.在生产者和队列中间多了一个x,这个x代表的是交换机。2. 在publish中可以有多个队列,以及多个消费者。在Publish模式下,生产者生产的消息,能被多个消费者所获取。
代码实现
生产者实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| package main import ( "RabbitMQ" "strconv" "strings" "time" ) func main(){ ch := rabbitMQ.Connect("amqp://user:password@ip:port/") rabbitMQ.NewExchange("amqp://user:password@ip:port/","exchange1","fanout") i := 0 for{ time.Sleep(1) greetings := []string{"Helloworld!",strconv.Itoa(i)} ch.Publish("exchange1",strings.Join( greetings, " "),"") i = i+1 } }
|
消费者
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| package main import ( rabbitMQ "RabbitMQ" "log" ) func main(){ receive_mq := rabbitMQ.New("amqp://user:password@ip:port/","hello1") rabbitMQ.NewExchange("amqp://user:password@ip:port/","exchange1","fanout") receive_mq.Bind("exchange1","") for{ msgs := receive_mq .Consume() go func() { for d := range msgs { log.Printf("recevie1 Received a message: %s", d.Body) } }() } }
|
消费者2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| package main import ( rabbitMQ "RabbitMQ" "log" ) func main(){ receive_mq := rabbitMQ.New("amqp://user:password@ip:port/","hello2") rabbitMQ.NewExchange("amqp://user:password@ip:port/","exchange1","fanout") receive_mq.Bind("exchange1","") for{ msgs := receive_mq .Consume() go func() { for d := range msgs { log.Printf("recevie2 Received a message: %s", d.Body) } }() } }
|