rabbitmq - 使用 MassTransit/RabbitMQ 更改消息优先级
问题描述
我有一个包含 100 条消息的队列。在某些时候,我想发送一条消息,但这条消息具有更高的优先级,应该在现有的 100 条消息之前首先处理。
有没有办法做到这一点 ?
谢谢,
试图设置但没有更多消息到达:在发件人上(Web API)
var bus = Bus.Factory.CreateUsingRabbitMq(sbc =>
sbc.Host("hostName", "host", h =>
{
h.Username("username");
h.Password("password);
})
);
Send the message
Uri uri = new Uri("queue:myQueue");
var endpoint = await bus.GetSendEndpoint(uri);
await endpoint.Send(request);
在消费者(控制台应用程序)上:
static void Main(string[] args)
{
var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
cfg.Host("localhost", "/", h =>
{
h.Username("guest");
h.Password("guest");
});
cfg.ReceiveEndpoint("myQueue", e =>
{
e.Handler<myType>(context =>
{
return Console.Out.WriteLineAsync($"{context.Message.Id}");
});
});
});
busControl.Start();
Console.WriteLine("Receive listening for messages");
Console.ReadLine();
busControl.Stop();
}
解决方案
配置接收端点时,您可以为该端点(队列)启用优先级:
configurator.ReceiveEndpoint("priority_input_queue", x =>
{
x.EnablePriority(4);
x.ConfigureConsumer(...);
});
这将配置端点的最大允许优先级为四 (4)。
然后,在发送/发布消息时,可以指定优先级:
await Bus.Publish(new Message(...), context =>
{
context.SetPriority(2);
});
如果未指定任何值,则使用默认优先级。
推荐阅读
- rust - 如何创建具有计时时区的通用 Rust 结构?
- python - 如何在直方图的 x 轴标签上添加每小时桶?
- git - 如何在 git 中显示文件的所有不同历史文件名/文件路径?
- python - 如果数据以特定字符开头,则删除 pandas 数据框中的一行
- c++ - 在 C++ DirectX Tool Kit 中渲染纹理问题
- kubernetes - 使用 kops 在 gcp 上验证集群时出现 TLS 握手超时错误
- typescript - 使用 React 和 Apollo 客户端防止对列表中的子元素进行多余的重新获取和重新绘制
- java - 无效值用户输入再次要求放入数组
- sharepoint - JMETER 的 SharePoint 应用程序可行性
- rsocket - Spring Webflux vs Rsocket