使用Servicestack在RabbitMQ队列上设置TTL

时间:2017-02-22 14:56:47

标签: c# rabbitmq servicestack ttl

I have read可以在RabbitMQ(每个队列)上设置生存时间(TTL),以便如果TTL过期,RabbitMQ服务器将从队列中擦除消息,并且服务器将保证不会处理具有过期TTL的邮件。

我正在使用service stack to connect to various rabbitMq's;特别是我使用它作为RabbitMQ提供的RPC功能的外观,它确实工作得很好。

我无法找到任何信息(也可以查看代码支持),以便在声明时设置队列的TTL。据我所知,队列的创建隐藏在服务堆栈实现中 - 它抽象了许多队列细节,以提供简化的服务抽象,无论传输层如何。

是否可以这样做(使用服务堆栈在Rabbit MQ上设置TTL) - 或者将来是否可以这样做?

1 个答案:

答案 0 :(得分:3)

我添加了一个过滤器,可以让您自定义使用新CreateQueueFilter创建的Rabbit MQ Queue和主题的选项,例如:

container.Register<IMessageService>(c => 
    new RabbitMqServer(ConnectionString)
    {
        CreateQueueFilter = (queueName, args) =>
        {
            if (queueName == QueueNames<MyRequest>.In)
            {
                args["x-message-ttl"] = 60000;
            }
        }
    });

此更改可从v4.5.7 +现在available on MyGet获得。