rabbitMQ的三種路由模式

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));   
View Code

 

 

 三種經常使用路由模式:消息隊列

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

相關文章
相關標籤/搜索