【问题标题】:Acknowledge when the client has completely processed the message. Rabbitmq当客户端完全处理完消息时确认。兔MQ
【发布时间】:2019-08-31 18:52:37
【问题描述】:
        var consumer = new EventingBasicConsumer(channel);
        consumer.Received +=  (model, ea) =>
        {
            var eventName = ea.RoutingKey;
            var message = Encoding.UTF8.GetString(ea.Body);

            ProcessEvent(eventName, message);


            channel.BasicAck(ea.DeliveryTag, multiple: false);

        };

        channel.BasicConsume(queue: _queueName,
                             autoAck: false,
                             consumer: consumer);

private void ProcessEvent(string eventName, string message) { //code send the acknowledgement here, before completing the processing if (_subsManager.HasSubscriptionsForEvent(eventName) { using (var scope = _autofac.BeginLifetimeScope(AUTOFAC_SCOPE_NAME)) { var subscriptions = _subsManager.GetHandlersForEvent(eventName); foreach (var subscription in subscriptions) { if (subscription.IsDynamic) { var handler = scope.ResolveOptional(subscription.HandlerType) as IDynamicIntegrationEventHandler; dynamic eventData = JObject.Parse(message); handler.Handle(eventData);
}

//当客户端使用 RabbitMQ 完全处理完消息时,我需要确认。在我的应用程序中,一旦调用了消费者构造函数,就会得到确认。我希望只有在处理完成后才能完成。我为消息代理创建了一个通用类。但我想要这个功能用于特定的订阅事件。这是我的代码,我正在处理事件

【问题讨论】:

    标签: c# rabbitmq consumer


    【解决方案1】:

    The documentation 向我们展示了如何做到这一点:

    var consumer = new EventingBasicConsumer(channel);
    consumer.Received += (ch, ea) =>
                    {
                        var body = ea.Body;
                        // ... process the message
    
                        // ACK the message
                        channel.BasicAck(ea.DeliveryTag, false);
                    };
    String consumerTag = channel.BasicConsume(queueName, false, consumer);
    

    另见https://www.rabbitmq.com/confirms.html

    【讨论】:

    • 嗨..我也做了同样的事情,但是它会立即发回确认,在处理消息时在类中调用构造函数。确认出现在 channel.basicAck 函数之前..而处理尚未完成。我希望它应该只在处理完成后。因为我正在更新 2 个数据库
    • 请编辑您的问题并显示为代码的相关部分。
    猜你喜欢
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多