首页 > 解决方案 > 使用 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();
}

标签: rabbitmqmasstransit

解决方案


配置接收端点时,您可以为该端点(队列)启用优先级:

configurator.ReceiveEndpoint("priority_input_queue", x =>
{
    x.EnablePriority(4);

    x.ConfigureConsumer(...);
});

这将配置端点的最大允许优先级为四 (4)。

然后,在发送/发布消息时,可以指定优先级:

await Bus.Publish(new Message(...), context =>
{
    context.SetPriority(2);
});

如果未指定任何值,则使用默认优先级。


推荐阅读