@@ -609,24 +609,64 @@ public override void HandleBasicDeliver(string consumerTag,
609
609
{
610
610
this . latch . Set ( ) ;
611
611
}
612
- base . m_model . BasicAck ( deliveryTag , false ) ;
612
+ this . PostHandleDelivery ( deliveryTag ) ;
613
613
} finally
614
614
{
615
615
counter += 1 ;
616
616
}
617
617
}
618
+
619
+ public virtual void PostHandleDelivery ( ulong deliveryTag )
620
+ {
621
+ }
622
+ }
623
+
624
+ public class AckingBasicConsumer : TestBasicConsumer1
625
+ {
626
+ public AckingBasicConsumer ( IModel model , AutoResetEvent latch , Action fn ) : base ( model , latch , fn ) { }
627
+
628
+ public override void PostHandleDelivery ( ulong deliveryTag )
629
+ {
630
+ base . m_model . BasicAck ( deliveryTag , false ) ;
631
+ }
632
+ }
633
+
634
+ public class NackingBasicConsumer : TestBasicConsumer1
635
+ {
636
+ public NackingBasicConsumer ( IModel model , AutoResetEvent latch , Action fn ) : base ( model , latch , fn ) { }
637
+
638
+ public override void PostHandleDelivery ( ulong deliveryTag )
639
+ {
640
+ base . m_model . BasicNack ( deliveryTag , false , false ) ;
641
+ }
618
642
}
619
643
620
644
[ Test ]
621
645
public void TestBasicAckAfterChannelRecovery ( )
622
646
{
623
- var q = Model . QueueDeclare ( GenerateQueueName ( ) , false , false , false , null ) . QueueName ;
624
- var n = 30 ;
647
+ var latch = new AutoResetEvent ( false ) ;
648
+ var cons = new AckingBasicConsumer ( Model , latch , ( ) => {
649
+ CloseAndWaitForRecovery ( ) ;
650
+ } ) ;
651
+
652
+ TestDelayedBasicAckNackAfterChannelRecovery ( cons , latch ) ;
653
+ }
625
654
655
+ [ Test ]
656
+ public void TestBasicNackAfterChannelRecovery ( )
657
+ {
626
658
var latch = new AutoResetEvent ( false ) ;
627
- var cons = new TestBasicConsumer1 ( Model , latch , ( ) => {
659
+ var cons = new NackingBasicConsumer ( Model , latch , ( ) => {
628
660
CloseAndWaitForRecovery ( ) ;
629
661
} ) ;
662
+
663
+ TestDelayedBasicAckNackAfterChannelRecovery ( cons , latch ) ;
664
+ }
665
+
666
+ protected void TestDelayedBasicAckNackAfterChannelRecovery ( TestBasicConsumer1 cons , AutoResetEvent latch )
667
+ {
668
+ var q = Model . QueueDeclare ( GenerateQueueName ( ) , false , false , false , null ) . QueueName ;
669
+ var n = 30 ;
630
670
Model . BasicQos ( 0 , 1 , false ) ;
631
671
Model . BasicConsume ( q , false , cons ) ;
632
672
0 commit comments