消息队列的使用场景 很大一部分是要进行耗时处理,所以 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) 这样 ,在消息处理端耗时较大时,可以开启更多的 处理程序来应对,支持分布式,