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"。