1.声明一个交换器和队列
第一种方式,已知队列名称(由客户端分配而非RabbitMQ自动生成)
//创建了一个持久化的,非自动删除的、绑定类型为direct的转换器
channel.ExchangeDeclare(EXCHANGE_NAME, "direct", true, false, null);
//创建了一个持久化的,非排他性的、非自动删除的队列
channel.QueueDeclare(QUEUE_NAME, true, false, false, null);
channel.QueueBind(QUEUE_NAME, EXCHANGE_NAME, ROUTING_KEY, null);
第二种方式,不需要知道QueueName的场景。该场景声明的队列,只对当前应用中同一个Connection层面可用,同一个Connection的不同的Channel可用,并且也会在应用连接断开时自动删除
//创建了一个持久化的,非自动删除的、绑定类型为direct的转换器
channel.ExchangeDeclare(EXCHANGE_NAME, "direct", true, false, null);
//创建了一个非持久化的,排他性的、自动删除的队列//队列的名称由RabbitMQ自动生成
var queue = channel.QueueDeclare();
//获取队列名称
string queueName = queue.QueueName;
//队列与交换器绑定
channel.QueueBind(queueName, EXCHANGE_NAME, ROUTING_KEY, null);
2.ExchangeDelare()说明
void ExchangeDeclare(string exchange, string type, bool durable, bool autoDelete, IDictionary<string, object> arguments);
主要参数介绍:
exchange:交换器名称
type:交换器类型,主要有fanout、direct,topic等;
durable:是否持久化,true为持久化,持久化可以将交换器存盘;
autoDelete:是否自动删除
arguments:其他参数
3.QueueDeclare()说明
public static QueueDeclareOk QueueDeclare(this IModel model, string queue = "", bool durable = false, bool exclusive = true, bool autoDelete = true, IDictionary<string, object> arguments = null);
主要参数介绍:
queue :队列名称;
durable :是否持久化;
exclusive :是否排他;如果设置为true(即排他):①排他队列是基于连接的(Connetcion),同一个连接的不同的信道(Channel)可以同时访问同一个连接创建的排他队列;②如果一个连接已经声明了一个排他队列,其他连接不允许创建同名的排他队列;③即使该队列是持久化的,一旦连接或者客户端退出,该排他队列都会自动删除;排他队列适用于一个客户端同时发送和读取消息的场景
autoDelete :是否自动删除;
arguments :其他参数。
4.QueueBind()说明
void QueueBind(string queue, string exchange, string routingKey, IDictionary<string, object> arguments);
queue :队列名称;
exchange:交换器名称
routingKey:用来绑定队列和交换器的路由键
arguments :其他参数。