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