Rabbit 進階之自動任務分配
阿新 • • 發佈:2019-01-24
訊息佇列的使用場景 很大一部分是要進行耗時處理,所以 Rabbit 優勢就會很明顯,在我的上一篇部落格中使用釋出/訂閱的訂閱模式來接收訊息時,
可以直接啟動多個例項. 我將傳送訊息稍加修改(快速傳送1000個訊息),程式碼如下
傳送多個訊息
static void Main(string[] args) { var factory = new ConnectionFactory(); factory.UserName = "guest"; factory.Password = "guest"; factory.VirtualHost = "/"; factory.HostName = "127.0.0.1"; var conn = factory.CreateConnection(); var channel = conn.CreateModel(); channel.ExchangeDeclare("exchange", ExchangeType.Direct); channel.QueueDeclare("myRabbit", false, false, false, null); channel.QueueBind("myRabbit", "exchange", "123", null); for (int i = 0; i < 1000; i++) { byte[] messageBodyBytes = Encoding.UTF8.GetBytes("msg"+i); channel.BasicPublish("exchange", "123", null, messageBodyBytes); } }
繼續使用原來的接收程式, 但是 我打開了3個應用程式同事等待訊息傳送, 然後 啟動傳送程式
結果, 3個程式都會收到1000個訊息嗎? No No No 是三個程式一起處理了這1000個訊息.
執行結果
官網稱這個為工作佇列(work queue) 這樣 ,在訊息處理端耗時較大時,可以開啟更多的 處理程式來應對,支援分散式,