消息订阅的具体实现参考官网的代码:https://www.rabbitmq.com/tutorials/tutorial-three-go.html;
主要对QueueDeclare函数的durable持久化参数和exclusive排他性参数进行说明
1、正常情况,如果我们部署的消息发布者,只需要声明exchangeName相同,以及设置为fanout扇形,那么就可以多个发布者往一个交换机发送消息,形成多个生产者。
2、但是对于订阅者,如果发布者发布的消息太多,导致单机处理不过来,或者需要防止单机挂掉,需要分布式部署,那就需要多个订阅者订阅同一个队列,并且订阅者分别部署在不同的机器上,防止单机挂掉。
3、单机部署:队列名可以随机,durable=false,exclusive=true;
分布式部署:队列名指定相同,durable=true,exclusive=false;
exclusive=true表示仅对首次声明它的连接可见, 并在连接断开时自动删除;
并且如果exclusive=true,队列名如果相同,那么除了首次创建队列成功,其余的都会创建失败;
//单机部署,队列名填空随机生成,durable=false,exclusive=true;
q, err := data.Ch.QueueDeclare(
data.QuenueName, // name,如果队列名字为空,则会自动生成随机字符串;
false, // durable,队列不做持久化,则关闭后队列就会消息,且失去与exchange的绑定关系;
false, // delete when unused
true, // exclusive,排他性,true表示另外建立一个同样的队列会失败,如果想对个程序建立同一个队列,则设置为false;
false, // no-wait
nil, // arguments
)
//分布式部署:QuenueName = "testlogQuenue",先指定队列名,同时durable=true持久化,exclusive=false不设置排他性。
q, err := data.Ch.QueueDeclare(
data.QuenueName, // name,如果队列名字为空,则会自动生成随机字符串;
true, // durable,队列不做持久化,则关闭后队列就会消息,且失去与exchange的绑定关系;
false, // delete when unused
false, // exclusive,排他性,true表示另外建立一个同样的队列会失败,如果想对个程序建立同一个队列,则设置为false;
false, // no-wait
nil, // arguments
)
http://t.zoukankan.com/no-celery-p-13803419.html