文章预览
动手造轮子 - 实现一个支持 Ack 的内存队列 Intro 有些时候我们会希望从消息队列里消费消息时只有消费成功 Ack 之后才将消息从队列中移除,我们尝试来实现一个支持 Ack 的队列 Sample 使用示例如下: var ackQueue = new AckQueue( new AckQueueOptions() { AckTimeout = TimeSpan.FromSeconds( 1 ) }); await ackQueue.EnqueueAsync( new CounterEvent { Counter = 1 }); await ackQueue.EnqueueAsync( new CounterEvent { Counter = 2 }); var event1 = await ackQueue.DequeueAsync (); ArgumentNullException.ThrowIfNull(event1); Console.WriteLine(@ $"event1: {event1.ToJson()} " ); var event2 = await ackQueue.DequeueAsync (); ArgumentNullException.ThrowIfNull(event2); Console.WriteLine(@ $"event2: {event2.ToJson()} " ); await ackQueue.AckMessageAsync(event2.Properties.EventId); var event3 = await ackQueue.DequeueAsync (); Console.WriteLine(@ $"event3: {event3.ToJson()} " ); await Task.Dela
………………………………