c# - RabbitMQ 只监听队列中的第一条消息

标签 c# rabbitmq

我的 Rabbit 队列有问题,目前只对队列中的第一条消息作出 react ,之后推送的任何其他消息都将被忽略。

我首先实例化连接并在我的 IQueueConnectionProvider 中声明队列:

var connectionFactory = new ConnectionFactory() { HostName = hostName };
var connection = _connectionFactory.CreateConnection();
var channel = connection.CreateModel();

然后在我的 IQueueListener 中使用 IQueueConnectionProvider 作为依赖项,只有一种方法:

public void ListenToQueue(string queue)
{
    var channel = _queueConnectionProvider.GetQueue();

    var consumer = new EventingBasicConsumer(channel);
    consumer.Received += (model, ea) =>
    {
        string path = @"d:\debug.log.txt";
        File.AppendAllLines(path, new List<string>() {"MESSAGE RECEIVED", Environment.NewLine });

        var body = ea.Body;
        var message = Encoding.UTF8.GetString(body);

        channel.BasicAck(ea.DeliveryTag, false);
    };

    channel.BasicConsume(queue, true, consumer);

}

我的日志文件最终只有一行“收到的消息”,但是我可以在 Rabbit ui 界面中看到我的其他服务正在将消息推送到该队列。

我在这里遗漏了什么吗?

最佳答案

这是一个愚蠢的错误……又一次。

channel.BasicConsume(queue, false, consumer);

这正是我所需要的。我想手动确认我的消息,因此 noAck 需要为 false

关于c# - RabbitMQ 只监听队列中的第一条消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34603150/

相关文章:

c# - LINQ Select Distinct 忽略 XML 字段

C# 反序列化字典<Int,Object> 使用 Json.NET 失败

python - Celery - 使用 apply_async 添加 7000 个任务需要 12 秒

ssl - new_ssl 在哪里?

javascript - 如何知道践踏消息是否已正确发送?

c# - 最快的 GDI+ 渲染设置是什么?

c# - 在 Mac 和 Linux 等其他平台上使用 C#.Net Windows 应用程序

c#dictionary<string,string> order by key asc 最后为空值

.net - 配置连接时如何将 x-max-length 和 x-overflow 添加到 MassTransit 队列?

php - mysql错误: Mysql server has gone away