【问题标题】:Change message priority with MassTransit/RabbitMQ使用 MassTransit/RabbitMQ 更改消息优先级
【发布时间】:2021-07-09 16:24:11
【问题描述】:

我有一个包含 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();
}

【问题讨论】:

    标签: rabbitmq masstransit


    【解决方案1】:

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

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

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

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

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

    如果没有指定值,则使用默认优先级。

    【讨论】:

    • 什么更新?而且你总是启动总线,包括 web api 中的总线。
    • 在我的代码中,我看不到在哪里设置优先级
    猜你喜欢
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2015-02-11
    相关资源
    最近更新 更多