Rabbitmq 正在尝试将过期设置为消息(单个),但仍为';就绪';排队?

Rabbitmq 正在尝试将过期设置为消息(单个),但仍为';就绪';排队?,rabbitmq,Rabbitmq,我试图将RabbitMQ消息发布到一个队列(默认情况下,该队列没有TTL集),在该队列中发布的每条消息都可以指定一个单独的TTL。我相信我在C#中是这样做的: public override bool PostData(对象数据,int?ttl=null) { 尝试 { _channel.QueueDeclare(_queue,true,false,false,null); var body=NET.ObjectToByteArray(数据); var属性=_channel.CreateBasi

我试图将RabbitMQ消息发布到一个队列(默认情况下,该队列没有TTL集),在该队列中发布的每条消息都可以指定一个单独的TTL。我相信我在C#中是这样做的:

public override bool PostData(对象数据,int?ttl=null)
{
尝试
{
_channel.QueueDeclare(_queue,true,false,false,null);
var body=NET.ObjectToByteArray(数据);
var属性=_channel.CreateBasicProperties();
如果(ttl!=null)/您可以同时设置和单独设置。如果同时设置,则将使用最短的一个。当ttl过期的消息到达队列头部时,将从队列中删除(有关详细信息,请参阅部分)

此外,来自:

ttl过期的消息只要不到达队列头,就会留在队列中。别担心,它们不会发送给消费者,但在到达队列头之前会占用一些资源。RabbitMQ队列就是这样工作的(它们坚持FIFO思想,这有时可能会破坏与AMQP协议的严格兼容性)。有关更多信息,请参阅

    public override bool PostData(object data, int? ttl = null)
    {
        try
        {
            _channel.QueueDeclare(_queue, true, false, false, null);

            var body = NET.ObjectToByteArray(data);
            var properties = _channel.CreateBasicProperties();
            if (ttl != null)  // <----- here
                properties.Expiration = ttl.ToString();
            properties.SetPersistent(true);

            // Publish the actual message on the specified queue
            _channel.BasicPublish("", _queue, properties, body);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.StackTrace);
        }

        return false;
    }