Can you turn on DEBUG level logging for log4net and show what the log statements output?
On Tue, Oct 25, 2011 at 4:35 AM, ColinA <[email protected]>wrote: > I'm having a bit of trouble while testing how resilient Rhino Queues is to > failures - most likely it is something I am doing wrong or not > understanding! Basically, I am intermittently receiving the same message > multiple times, even though it has previously been received within a > transaction. > > Here is the code for a console application that I wrote just to play > around: > > using System; >> using System.Collections.Generic; >> using System.Linq; >> using System.Net; >> using System.Text; >> using System.Transactions; >> >> using Rhino.Queues; >> >> namespace Test >> { >> class Program : IDisposable >> { >> private static QueueManager receiver; >> private static QueueManager sender; >> >> static void Main(string[] args) >> { >> var receiver = new QueueManager(new >> IPEndPoint(IPAddress.Loopback, 4545), "receiver.esent"); >> receiver.CreateQueues("test"); >> receiver.Start(); >> >> var sender = new QueueManager(new >> IPEndPoint(IPAddress.Loopback, 4546), "sender.esent"); >> sender.Start(); >> >> using (var tx = new TransactionScope()) >> { >> sender.Send(new Uri("rhino.queues://localhost:4545/test"), >> new MessagePayload >> { >> Data = Encoding.ASCII.GetBytes("Test message") >> }); >> >> tx.Complete(); >> } >> >> while (true) >> { >> using (var tx = new TransactionScope()) >> { >> try >> { >> var msg = receiver.Receive("test", new TimeSpan(0, >> 0, 5)); >> >> >> Console.WriteLine(msg.Id.MessageIdentifier.ToString() + ": " + >> Encoding.ASCII.GetString(msg.Data)); >> >> tx.Complete(); >> >> Console.WriteLine("\tTX complete"); >> } >> catch (TimeoutException) >> { >> Console.WriteLine("\tTimeout"); >> break; >> } >> } >> Console.WriteLine("\tTX end"); >> System.Diagnostics.Process.GetCurrentProcess().Kill(); >> } >> >> Console.WriteLine("Press Enter to exit"); >> Console.ReadLine(); >> } >> >> public void Dispose() >> { >> if (sender != null) >> sender.Dispose(); >> >> if (receiver != null) >> receiver.Dispose(); >> } >> } >> } >> > > First, I run it once, with the > System.Diagnostics.Process.GetCurrentProcess().Kill(); > uncommented. Next I comment out the > System.Diagnostics.Process.GetCurrentProcess().Kill(); > and run it again. > > So, here is my understanding of what happened on the first run: > > 1. One message was sent, and was received within a transaction > 2. That transaction completed sucessfully > 3. The process terminated > > And here is my understanding of what *should *happen on the second run: > > 1. One message is sent, and will be received within a transaction > 2. Thre are no moe messages left to receive, so we will timeout and > exit gracefully > > However, *sometimes *on the second run I am receiving both the new > message, *and *the message that I received on the previous run. > > Is this the expected behaviour? > > Thanks! > > Colin > > -- > You received this message because you are subscribed to the Google Groups > "Rhino Tools Dev" group. > To view this discussion on the web visit > https://groups.google.com/d/msg/rhino-tools-dev/-/Q4YMdLpCo60J. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/rhino-tools-dev?hl=en. > -- You received this message because you are subscribed to the Google Groups "Rhino Tools Dev" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rhino-tools-dev?hl=en.
