@@ -375,15 +375,24 @@ type internal MultiTopicsConsumerImpl<'T> (consumerConfig: ConsumerConfiguration
375375 | Ok msg -> incomingMessagesSize <- incomingMessagesSize + msg.Data.LongLength
376376 | _ -> ()
377377 incomingMessages.Enqueue( m)
378+
379+ let tryResumePoller () =
380+ if isPollingAllowed() && ( waitingPoller <> defaultWaitingPoller) then
381+ Log.Logger.LogDebug( " {0} resume poller" , prefix)
382+ waitingPoller.SetResult()
383+ waitingPoller <- defaultWaitingPoller
384+
385+ let clearIncomingMessages () =
386+ incomingMessages.Clear()
387+ incomingMessagesSize <- 0 L
388+ tryResumePoller()
378389
379390 let dequeueMessage () =
380391 let m = incomingMessages.Dequeue()
381392 match m with
382393 | Ok msg -> incomingMessagesSize <- incomingMessagesSize - msg.Data.LongLength
383394 | _ -> ()
384- if isPollingAllowed() && ( waitingPoller <> defaultWaitingPoller) then
385- waitingPoller.SetResult()
386- waitingPoller <- defaultWaitingPoller
395+ tryResumePoller()
387396 m
388397
389398 let hasEnoughMessagesForBatchReceive () =
@@ -678,6 +687,7 @@ type internal MultiTopicsConsumerImpl<'T> (consumerConfig: ConsumerConfiguration
678687 replyWithBatch ch
679688 // check if should reply to poller immediately
680689 if isPollingAllowed() |> not then
690+ Log.Logger.LogDebug( " {0} paused poller, incomingMessages={1}, sharedQueueResumeThreshold={2}" , prefix, incomingMessages.Count, sharedQueueResumeThreshold)
681691 waitingPoller <- pollerChannel
682692 else
683693 pollerChannel.SetResult()
@@ -755,9 +765,8 @@ type internal MultiTopicsConsumerImpl<'T> (consumerConfig: ConsumerConfiguration
755765 |> Seq.map( fun ( KeyValue ( _ , ( consumer , _ ))) -> consumer.RedeliverUnacknowledgedMessagesAsync())
756766 |> Task.WhenAll
757767 unAckedMessageTracker.Clear()
758- incomingMessages.Clear ()
768+ clearIncomingMessages ()
759769 currentStream.RestartCompletedTasks()
760- incomingMessagesSize <- 0 L
761770 channel |> Option.map _. SetResult() |> ignore
762771 with ex ->
763772 Log.Logger.LogError( ex, " {0} RedeliverUnacknowledgedMessages failed" , prefix)
@@ -838,16 +847,16 @@ type internal MultiTopicsConsumerImpl<'T> (consumerConfig: ConsumerConfiguration
838847 Log.Logger.LogDebug( " {0} Seek {1}" , prefix, seekData)
839848 backgroundTask {
840849 try
850+ unAckedMessageTracker.Clear()
851+ clearIncomingMessages()
841852 let! _ =
842853 consumers
843854 |> Seq.map ( fun ( KeyValue ( _ , ( consumer , _ ))) ->
844855 match seekData with
845856 | SeekType.Timestamp ts -> consumer.SeekAsync( ts)
846857 | SeekType.MessageId msgId -> consumer.SeekAsync( msgId))
847858 |> Task.WhenAll
848- unAckedMessageTracker.Clear()
849- incomingMessages.Clear()
850- incomingMessagesSize <- 0 L
859+ currentStream.RestartCompletedTasks()
851860 channel.SetResult()
852861 with Flatten ex ->
853862 channel.SetException ex
@@ -856,13 +865,13 @@ type internal MultiTopicsConsumerImpl<'T> (consumerConfig: ConsumerConfiguration
856865 | SeekWithResolver ( resolver, channel) ->
857866 backgroundTask {
858867 try
868+ unAckedMessageTracker.Clear()
869+ clearIncomingMessages()
859870 let! _ =
860871 consumers
861872 |> Seq.map ( fun ( KeyValue ( _ , ( consumer , _ ))) -> consumer.SeekAsync( resolver))
862873 |> Task.WhenAll
863- unAckedMessageTracker.Clear()
864- incomingMessages.Clear()
865- incomingMessagesSize <- 0 L
874+ currentStream.RestartCompletedTasks()
866875 channel.SetResult()
867876 with Flatten ex ->
868877 channel.SetException ex
0 commit comments