加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – RabbitMQ仅侦听队列中的第一条消息

发布时间:2020-12-15 08:02:53 所属栏目:百科 来源:网络整理
导读:我的Rabbit队列存在问题,目前只对队列中的第一条消息作出反应,之后被忽略的任何其他消息都被忽略. 我首先实例化连接并在IQueueConnectionProvider中声明队列: var connectionFactory = new ConnectionFactory() { HostName = hostName };var connection = _
我的Rabbit队列存在问题,目前只对队列中的第一条消息作出反应,之后被忽略的任何其他消息都被忽略.

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

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

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

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);

}

我的日志文件最终只有一行“MESSAGE RECEIVED”,但我可以在Rabbit ui界面看到我的其他服务正在将消息推送到该队列就好了.

这里有什么我想念的吗?

解决方法

这是一个愚蠢的错误……又一次.
channel.BasicConsume(queue,false,consumer);

这就是我所需要的.我想手动确认我的消息,因此noAck需要是假的;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读