rabbitMQ工做流程:正则表达式
一、声明交换机服务器
二、声明消息队列并发
三、绑定交换机和队列ide
四、生产者往交换机里发送新消息spa
五、交换机根据所选的模式和routingKey决定消息发往哪条消息队列code
六、一个消费者只能消费一条消息队列blog
(若是重复声明,类型参数不变不会报错。 若是第二次声明和第一次类型参数有变化,会报异常) 队列
上代码:路由
1 var factory = new ConnectionFactory(); 2 factory.UserName = "guest"; 3 factory.Password = "guest"; 4 factory.HostName = "127.0.0.1"; //设置RabbitMQ服务器所在的IP或主机名 5 var connection = factory.CreateConnection(); 6 7 using (IModel channel = connection.CreateModel()) 8 { 9 //声明一个交换机 10 channel.ExchangeDeclare(exchange: "exchange1", 11 type: ExchangeType.Topic, 12 durable: true, 13 autoDelete: false, 14 arguments: null); 15 16 //声明三个消息队列 17 channel.QueueDeclare( 18 queue: "q1", 19 durable: true, 20 exclusive: false, 21 autoDelete: false, 22 arguments: null); 23 24 channel.QueueDeclare( 25 queue: "q2", 26 durable: true, 27 exclusive: false, 28 autoDelete: false, 29 arguments: null); 30 31 channel.QueueDeclare( 32 queue: "q3", 33 durable: true, 34 exclusive: false, 35 autoDelete: false, 36 arguments: null); 37 38 //用不一样的routingKey绑定队列与交换机 39 channel.QueueBind(queue: "q1", 40 exchange: "exchange1", 41 routingKey: "person.name.*", 42 arguments: null); 43 44 channel.QueueBind(queue: "q2", 45 exchange: "exchange1", 46 routingKey: "person.age.*", 47 arguments: null); 48 49 channel.QueueBind(queue: "q3", 50 exchange: "exchange1", 51 routingKey: "person.#", 52 arguments: null); 53 54 55 //往交换机中发出一条消息 56 channel.BasicPublish( 57 exchange: "exchange1", 58 routingKey: "person.name.jerry", 59 basicProperties: null, 60 body: Encoding.UTF8.GetBytes(msg));
三种经常使用路由模式:消息队列
一、Direct
这种模式下,交换机根据routingKey进行彻底匹配。若是匹配失败则丢弃消息。
例如:绑定的交换机routingKey是"person.name",而使用BasicPublish()方法往交换机发消息时用的"person.name"则匹配成功,将根据交换机名称和routingKey找到绑定的消息队列,并发送新消息。
二、Fanout
这种模式会彻底忽略routingKey。
只要往交换机1中发送消息,则会广播到与交换机1绑定的全部消息队列。
三、Topic
这种模式下能够对routingKey进行模糊匹配,若是匹配失败则丢弃消息,若是匹配多个结果,则往多个结果都发送消息。
相似于正则表达式, 它有两种语法:“*”,"#"
"*"只匹配当前级别的词,如"person.*"能够匹配"person.name",没法匹配"person.name.jerry"。没法匹配空,如"person"。
"#"能匹配多个子级别的词,如"person.#"能够匹配"person.name",也能够匹配"person.name.jerry"。能够匹配空,如"person"。