RabbitMQ系列(三)-工作队列模式
上一篇 : RabbitMQ系列(二)-点对点模式
下一篇 : RabbitMQ系列(四)-发布订阅模式
一、 介绍
1. 上一篇博主介绍了点对点的工作模式,比较适合顺序消费的场景.但是消费能力就不足了.
2. 工作队列模式也是其中的一种. 指的是一个同一时刻,一个生产者,一个队列,多个消费者.增加了消费能力.
3. 使用默认的default交换机,rootingkey是ququename
4. 下图是官网对这个模式介绍的一张图片.
二、 测试
2.1 生产者(和点对点模式相同)
- 首先安装Nuget包–>RabbitMQ.Client
- 生产者—>由于代码和点对点模式相同,博主这边就直接给结果了
- 生产了30条消息在队列 —worker_queue中
2.2 消费者
var factory = new ConnectionFactory
{
HostName = "192.168.3.20", # rabbit地址
Port = 5672, # 如果改了端口的需要在这里指定
UserName = "xxx", #登录名
Password = "xxx", #密码
VirtualHost = "/" #虚拟主机
};
#region 点对点
string queueName = "worker_queue"; # 声名队列
using var conn = factory.CreateConnection(); #创建连接
using var channel = conn.CreateModel(); #创建channel信道
channel.QueueDeclare(queue: queueName, # 声明队列
durable: false,
exclusive: false,
autoDelete: false,
arguments: null);
#消费者是以事件的方式订阅消息的
var consumer = new EventingBasicConsumer(channel);
#根据机器性能给消费者定消费能力计划
channel.BasicQos(prefetchSize: 0,
prefetchCount: 1, #表示消费着同一时刻只能消费一条消息
global: false);
consumer.Received += (model, ea) =>
{
var body = ea.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
Console.WriteLine($"Received {message}");
};
channel.BasicConsume(queue: queueName, #消费完成通知rabbit
autoAck: true,
consumer: consumer);
#endregion
Console.ReadKey();
2.3 测试消费
1. 此时我们可以看到积压的消息按照顺序全部处理完了,由于我们只是启动了一个消费者,那么和点对点模式一样了
2. 下面我们来启动多个消费者来看看效果
2.4 实时联调测试
三、 总结
1. 上面博主介绍了工作队列模式和实现.
2. 这种模式咱们在实际应用场景中就比点对点多了,多消费者,来增加消费能力.
3. 如有不对,欢迎指正.