RabbitMQ優(yōu)先級隊列的使用
生產(chǎn)者文章來源:http://www.zghlxwxcb.cn/news/detail-602790.html
public class PriorityQueue
{
public static void Send()
{
string path = AppDomain.CurrentDomain.BaseDirectory;
string tag = path.Split('/', '\\').Last(s => !string.IsNullOrEmpty(s));
Console.WriteLine($"這里是 {tag} 啟動了。。");
ConnectionFactory factory = new ConnectionFactory();
factory.HostName = "localhost";//RabbitMQ服務在本地運行
factory.UserName = "guest";//用戶名
factory.Password = "guest";//密碼
using (IConnection connection = factory.CreateConnection())
{
using (IModel channel = connection.CreateModel())
{
//創(chuàng)建隊列的時候,指定隊列的優(yōu)先級;x-max-priority:最大的優(yōu)先級是10
channel.QueueDeclare(queue: "PriorityQueue", durable: true, exclusive: false, autoDelete: false, arguments: new Dictionary<string, object>() {
{"x-max-priority",10 } //指定隊列要支持優(yōu)先級設置;
});
channel.ExchangeDeclare(exchange: "PriorityQueueExchange", type: ExchangeType.Direct, durable: true, autoDelete: false, arguments: null);
channel.QueueBind(queue: "PriorityQueue", exchange: "PriorityQueueExchange", routingKey: "PriorityKey");
string[] questionList = { "vip學員1 來請教", "甲 同學來請教問題",
"乙 同學來請教問題", "丙 同學來請教問題",
"丁 同學來請教問題", "vip學員2 來請教" };
//設置消息優(yōu)先級
//VIP學員和公開課學員同時來請教問題解答,當然是優(yōu)先VIP學員;
IBasicProperties props = channel.CreateBasicProperties();
foreach (string questionMsg in questionList)
{
if (questionMsg.StartsWith("vip"))
{
props.Priority = 9;
channel.BasicPublish(exchange: "PriorityQueueExchange",
routingKey: "PriorityKey",
basicProperties: props,
body: Encoding.UTF8.GetBytes(questionMsg));
}
else
{
props.Priority = 1;
channel.BasicPublish(exchange: "PriorityQueueExchange",
routingKey: "PriorityKey",
basicProperties: props,
body: Encoding.UTF8.GetBytes(questionMsg));
}
Console.WriteLine($"{questionMsg} 已發(fā)送~~");
}
Console.Read();
}
}
}
}
消費者文章來源地址http://www.zghlxwxcb.cn/news/detail-602790.html
public class PriorityQueue
{
public static void Consumption()
{
var factory = new ConnectionFactory();
factory.HostName = "localhost";//RabbitMQ服務在本地運行
factory.UserName = "guest";//用戶名
factory.Password = "guest";//密碼
using (var connection = factory.CreateConnection())
{
using (IModel channel = connection.CreateModel())
{
//定義消費者
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
string msg = Encoding.UTF8.GetString(ea.Body.ToArray());
Console.WriteLine(msg);
channel.BasicReject(deliveryTag: ea.DeliveryTag, requeue: false);
};
Console.WriteLine("消費者準備就緒....");
//處理消息
channel.BasicConsume(queue: "PriorityQueue", autoAck: false, consumer: consumer);
Console.ReadKey();
}
}
}
}
到了這里,關(guān)于RabbitMQ優(yōu)先級隊列的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!