Exchange
exchange 包含4中类型, direct, topic,fanout,header
-
direct :
exchage 和 queue 进行 binding 时会设置 routingKey ,channel.QueueBind(queue: "create_pdf_queue", exchange: "pdf_events", routingKey: "pdf_create", arguments: null);
然后,消息发送时也会设置对应的 routingKey , 只有两个 routingKey 完全相同,exchange才会选择对应的 binding 进行消息路由。
channel.BasicPublish(exchange: "pdf_events", routingKey: "pdf_create", basicProperties: properties, body: body);
-
topic
类似 direct exchange , 只是此模式 routingKey 可以使用通配符 '*','#'. -
fanout
将消息路由到所有绑定的队列中, 无需对消息的 routingKey 进行匹配操作。 -
header
路由规则是根据 header 进行判断,header 就是下面的 arguments 参数。Dictionary<string, object> aHeader = new Dictionary<string, object>(); aHeader.Add("format", "pdf"); aHeader.Add("type", "report"); aHeader.Add("x-match", "all"); channel.QueueBind(queue: "queue.A", exchange: "agreements", routingKey: string.Empty, arguments: aHeader);
其中 x-match 为特殊的 header , all 表示匹配所有的 header ,如果为 any 表示只要匹配其中一个 header 即可。
发布消息时传入 header 值。var properties = channel.CreateBasicProperties(); properties.Persistent = true; Dictionary<string, object> mHeader1 = new Dictionary<string, object>(); mHeader1.Add("format", "pdf"); mHeader1.Add("type", "report"); properties.Headers = mHeader1; channel.BasicPublish(exchange: "agreements", routingKey: string.Empty, basicProperties: properties, body: body);
总结
一般来说direct和topic用来具体的路由消息,如果要用广播的消息一般用fanout的exchange。
header类型用的比较少,但还是知道一点好。
网友评论