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
{
}
}
}
}