public void SendReceiveVirtualTopicMessage(
[Values(AcknowledgementMode.AutoAcknowledge, AcknowledgementMode.ClientAcknowledge,
AcknowledgementMode.DupsOkAcknowledge, AcknowledgementMode.Transactional)]
AcknowledgementMode ackMode,
[Values(MsgDeliveryMode.NonPersistent, MsgDeliveryMode.Persistent)]
MsgDeliveryMode deliveryMode)
{
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;
for(int index = 0; index < totalMsgs; index++)
{
string msgText = "Message #" + index;
Tracer.Info("Sending: " + msgText);
producer.Send(session.CreateTextMessage(msgText));
}
if(AcknowledgementMode.Transactional == ackMode)
{
session.Commit();
}
for(int index = 0; index < totalMsgs; index++)
{
string msgText = "Message #" + index;
ITextMessage messageA = consumerA.Receive(receiveTimeout) as ITextMessage;
Assert.IsNotNull(messageA, "Did not receive message for consumer A.");
messageA.Acknowledge();
Tracer.Info("Received A: " + msgText);
ITextMessage messageB = consumerB.Receive(receiveTimeout) as ITextMessage;
Assert.IsNotNull(messageB, "Did not receive message for consumer B.");
messageB.Acknowledge();
Tracer.Info("Received B: " + msgText);
Assert.AreEqual(msgText, messageA.Text, "Message text A does not match.");
Assert.AreEqual(msgText, messageB.Text, "Message text B does not match.");
}
if(AcknowledgementMode.Transactional == ackMode)
{
session.Commit();
}
}
// 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
{
}
}
}
}