客户端完成消息处理后进行确认。兔子MQ

问题描述 投票:0回答:1
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个回答
2
投票

文档向我们展示了如何做到这一点:

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

© www.soinside.com 2019 - 2024. All rights reserved.