1. 程式人生 > >Rabbit 進階之自動任務分配

Rabbit 進階之自動任務分配

訊息佇列的使用場景 很大一部分是要進行耗時處理,所以 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) 這樣 ,在訊息處理端耗時較大時,可以開啟更多的 處理程式來應對,支援分散式,