public void CheckSendPerformance(int count) { var queue = new MsmqMessageQueue("test.msmq.performance", "error").PurgeInputQueue(); var transportMessageToSend = new TransportMessageToSend { Headers = new Dictionary<string, string>(), Body = new byte[1024], Label = "this is just a label" }; var stopwatch = Stopwatch.StartNew(); count.Times(() => queue.Send("test.msmq.performance", transportMessageToSend)); var totalSeconds = stopwatch.Elapsed.TotalSeconds; Console.WriteLine("Sending {0} messages took {1:0} s - that's {2:0} msg/s", count, totalSeconds, count/totalSeconds); }
public void CanSendAndReceiveMessageToQueueOnLocalhost() { // arrange var queue = new MsmqMessageQueue("test.msmq.loca.input").PurgeInputQueue(); disposables.Add(queue); const string localHostQualifiedQueueName = "test.msmq.loca.input@localhost"; // act queue.Send(localHostQualifiedQueueName, new TransportMessageToSend { Body = Encoding.UTF8.GetBytes("yo dawg!") }, new NoTransaction()); Thread.Sleep(200); // assert var receivedTransportMessage = queue.ReceiveMessage(new NoTransaction()); receivedTransportMessage.ShouldNotBe(null); Encoding.UTF8.GetString(receivedTransportMessage.Body).ShouldBe("yo dawg!"); }
public void CanSendAndReceiveMessageToQueueOnMachineSpecifiedByIp() { var ipAddress = GuessOwnIpAddress(); // arrange var queue = new MsmqMessageQueue("test.msmq.ip.input").PurgeInputQueue(); disposables.Add(queue); var ipQualifiedName = "test.msmq.ip.input@" + ipAddress; // act queue.Send(ipQualifiedName, new TransportMessageToSend { Body = Encoding.UTF8.GetBytes("yo dawg!") }, new NoTransaction()); Thread.Sleep(1.Seconds()); // assert var receivedTransportMessage = queue.ReceiveMessage(new NoTransaction()); receivedTransportMessage.ShouldNotBe(null); Encoding.UTF8.GetString(receivedTransportMessage.Body).ShouldBe("yo dawg!"); }
public void CanSendAndReceiveMessageToQueueOnSpecificMachine() { // arrange var queue = new MsmqMessageQueue("test.msmq.mach.input").PurgeInputQueue(); disposables.Add(queue); var machineQualifiedQueueName = "test.msmq.mach.input@" + Environment.MachineName; // act queue.Send(machineQualifiedQueueName, new TransportMessageToSend { Body = Encoding.UTF8.GetBytes("yo dawg!") }, new NoTransaction()); Thread.Sleep(200); // assert var receivedTransportMessage = queue.ReceiveMessage(new NoTransaction()); receivedTransportMessage.ShouldNotBe(null); Encoding.UTF8.GetString(receivedTransportMessage.Body).ShouldBe("yo dawg!"); }
static void Run(Parameters parameters) { if (string.IsNullOrWhiteSpace(parameters.ErrorQueueName)) { throw new NiceException("Please specify the name of an error queue"); } using (var tx = new TransactionScope()) { var transactionContext = new AmbientTransactionContext(); if (!MessageQueue.Exists(MsmqUtil.GetPath(parameters.ErrorQueueName))) { throw new NiceException("The MSMQ queue '{0}' does not exist!", parameters.ErrorQueueName); } var msmqMessageQueue = new MsmqMessageQueue(parameters.ErrorQueueName, allowRemoteQueue: true); var allTheMessages = GetAllTheMessages(msmqMessageQueue, transactionContext); foreach (var message in allTheMessages) { var transportMessageToSend = message.ToForwardableMessage(); try { if (!transportMessageToSend.Headers.ContainsKey(Headers.SourceQueue)) { throw new NiceException( "Message {0} does not have a source queue header - it will be moved back to the input queue", message.Id); } var sourceQueue = (string)transportMessageToSend.Headers[Headers.SourceQueue]; if (parameters.AutoMoveAllMessages.GetValueOrDefault()) { msmqMessageQueue.Send(sourceQueue, transportMessageToSend, transactionContext); Print("Moved {0} to {1}", message.Id, sourceQueue); } else { var answer = PromptChar(new[] { 'y', 'n' }, "Would you like to move {0} to {1}? (y/n)", message.Id, sourceQueue); if (answer == 'y') { msmqMessageQueue.Send(sourceQueue, transportMessageToSend, transactionContext); Print("Moved {0} to {1}", message.Id, sourceQueue); } else { msmqMessageQueue.Send(msmqMessageQueue.InputQueueAddress, transportMessageToSend, transactionContext); Print("Moved {0} to {1}", message.Id, msmqMessageQueue.InputQueueAddress); } } } catch (NiceException e) { Print(e.Message); msmqMessageQueue.Send(msmqMessageQueue.InputQueueAddress, transportMessageToSend, transactionContext); } } if (parameters.DryRun.GetValueOrDefault()) { Print("Aborting queue transaction"); return; } if (!parameters.Interactive) { tx.Complete(); return; } var commitAnswer = PromptChar(new[] {'y', 'n'}, "Would you like to commit the queue transaction?"); if (commitAnswer == 'y') { Print("Committing queue transaction"); tx.Complete(); return; } Print("Queue transaction aborted"); } }