Productor -> ExChange ->[queue1, queue2...] <- Consumer
ExChange
类型1:
Direct 创建路由key,该类型可以定义发送绑定了路由key的queue【路由和queue绑定时定义routingKey】,可实现复杂系统的日志系统;类型2:
Fanout 发布订阅/观察者模式,该类型无需绑定routingKey,所有消费队列的消费者都会可以消费消息;可实现广播消息需求;类型3:
Topic 在Direct基础上添加模糊匹配【绑定时添加设置routingKey】,*匹配一个单词,#匹配多个单词;发送消息时,使用规则内的字符描述routingKey即可完成该类型;类型4:
Headers 采用Muliple attribute 代替routingKey,使用headers进行匹配【当x-match设置成any,只需要一个header value匹配即可,设置all则需要所有的values都必须匹配,官网:they can be used as direct exchanges where the routing key does not have to be a string, it could be an integer or a hash(dictionary) for example;
Headers 路由模式实例
这里我们假设已经存在了一个消息队列 MyHeaderQueue和一个Header 类型的ExChange: MyHeadersExChange以及一个channel
绑定时代码:
channel.QueueBind("MyHeaderQueue", "MyHeadersExChange", string.Empty, new Dictionary<stirng, object>() {
{“x-match”: "any"},
{"UserName", "王清水"}
//...这里可以继续添加多个
});
发布时代码:
var properties = channel.CreateBasicProperties();
properties.Header = new Dictionary<string, object>();
properties.Header.Add("UserName", "王清水");
channel.BasicPublish("MyHeadersExChange", routingKey: string.Empty, basicProperties: properties, body: "你发送的Msg")
网友评论