交换器声明(ExchangeDeclare)参数描述
exchange:交换器名称
type:类型
durable:持久化
autoDelete:自动删除
arguments:结构化参数(alternate-exchange)
durable:设置持久化后,将会存到硬盘中。服务器重启也不删除
autoDelete:当所有的与此连接的客户端都断开时,该交换器会被删除
队列声明(QueueDeclare)参数描述
queue:队列名称
durable:持久化
exclusive:排他
autoDelete:自动删除
arguments:结构化参数
durable:设置持久化后,将会存到硬盘中。服务器重启也不删除
exclusive:设置是否排他,排他队列是基于连接可见,同一连接的不同信道是可以同时访问同一连接创建的排他队列(这里还有待拓展)
autoDelete:没有消费者 自动删除队列
1)交换器和队列绑定
// 创建一个信道
var channel = connection.CreateModel(); // 声明一个持久化、非自动删除的、'fanout'类型的交换器
channel.ExchangeDeclare(exchange: exchangeName, type: ExchangeType.Fanout,durable:true);
// 声明一个非持久化的、排他的、自动删除的队列 var queueName = channel.QueueDeclare().QueueName; // 这里队列名称自动生成
// 绑定 channel.QueueBind(queue: queueName, exchange: exchangeName, routingKey: "");
2)另一个交换器与上述队列绑定(2个交换器共享同一队列)
// 声明交换器2
channel.ExchangeDeclare(exchange: exchangeName2, type: ExchangeType.Fanout, durable: true);
// 声明队列 该queueName与1)中的queueName是同一个。持久化、非排他、非自动删除
channel.QueueDeclare(queueName, true, false, false,null);
// 绑定
channel.QueueBind(queue: queueName, exchange: exchangeName2, routingKey: "");
3)交换机和交换器绑定
void ExchangeBind(string destination, string source, string routingKey);
一个queue 任何一条消息 只能被消费确认一次 而消费和确认是在某一个channel做的
所以一条消息 只会被一条channel管道消费 和确认成功唯一的一次 确认是肯定只有唯一的一次
异常情况下 可能有多次被获取 但是确认只能有一次