Apache.NMS.ActiveMQ.Test.VirtualTopicTest.AsyncSendReceiveVirtualTopicMessage C# (CSharp) Method

AsyncSendReceiveVirtualTopicMessage() private method

private AsyncSendReceiveVirtualTopicMessage ( [ ackMode, [ deliveryMode ) : void
ackMode [
deliveryMode [
return void
        public void AsyncSendReceiveVirtualTopicMessage(
			[Values(AcknowledgementMode.AutoAcknowledge, AcknowledgementMode.ClientAcknowledge, AcknowledgementMode.DupsOkAcknowledge)]
			AcknowledgementMode ackMode,
			[Values(MsgDeliveryMode.NonPersistent, MsgDeliveryMode.Persistent)]
			MsgDeliveryMode deliveryMode)
        {
            receivedA = 0;
            receivedB = 0;

            using(IConnection connection = CreateConnection(TEST_CLIENT_ID))
            {
                connection.Start();
                using(ISession session = connection.CreateSession(ackMode))
                {
                    using(IMessageConsumer consumerA = session.CreateConsumer(session.GetQueue(CONSUMER_A_DESTINATION_NAME)))
                    using(IMessageConsumer consumerB = session.CreateConsumer(session.GetQueue(CONSUMER_B_DESTINATION_NAME)))
                    using(IMessageProducer producer = session.CreateProducer(session.GetTopic(PRODUCER_DESTINATION_NAME)))
                    {
                        producer.DeliveryMode = deliveryMode;

                        consumerA.Listener += MessageListenerA;
                        consumerB.Listener += MessageListenerB;

                        for(int index = 0; index < totalMsgs; index++)
                        {
                            string msgText = "Message #" + index;
                            Tracer.Info("Sending: " + msgText);
                            producer.Send(session.CreateTextMessage(msgText));
                        }

                        int waitCount = 0;
                        while(receivedA < totalMsgs && receivedB < totalMsgs)
                        {
                            if(waitCount++ > 50)
                            {
                                Assert.Fail("Timed out waiting for message consumers.  A = " + receivedA + ", B = " + receivedB);
                            }

                            Tracer.Info("Waiting... Received A = " + receivedA + ", Received B = " + receivedB);
                            Thread.Sleep(250);
                        }
                    }

                    // Give the Broker some time to remove the subscriptions.
                    Thread.Sleep(2000);

                    try
                    {
                        ((Session) session).DeleteDestination(session.GetQueue(CONSUMER_A_DESTINATION_NAME));
                        ((Session) session).DeleteDestination(session.GetQueue(CONSUMER_B_DESTINATION_NAME));
                    }
                    catch
                    {
                    }
                }
            }
        }