public void ChannelSpecificHandler() { var writeHasBeenCalled = false; const int msgCount = 30000; m_proxy.Setup(x => x.WriteAsync(It.IsAny <List <Message> >(), It.IsAny <string>())) .ReturnsAsync(new List <Message>()); m_sut = new QueueMessageSender(m_settings, m_logger.Object); m_sut.AddMessageHandler(new ChannelSpecificMessageHandler { Action = async(messages, streamName) => { writeHasBeenCalled = true; await m_proxy.Object.WriteAsync(messages, streamName); } }); for (var i = 0; i < msgCount; i++) { m_sut.Enqueue("a message", "channel"); } m_sut.WaitForIdle(); Assert.True(writeHasBeenCalled); Assert.Equal(0, m_sut.GetPendingMessageCount()); Assert.Equal(msgCount, m_sut.EnqueuedMessageCount); Assert.Equal(msgCount, m_sut.SentMessageCount); m_sut.Dispose(); }
public void MultipleThreadsToEnqueue() { var sendToKinesisHasBeenCalled = false; const int msgCount = 30000; m_proxy.Setup(x => x.WriteAsync(It.IsAny <List <Message> >(), It.IsAny <string>())) .ReturnsAsync(new List <Message>()); m_sut = new QueueMessageSender(m_settings, m_logger.Object); m_sut.AddMessageHandler(new GlobalMessageHandler() { Action = async messages => { sendToKinesisHasBeenCalled = true; await m_proxy.Object.WriteAsync(messages, "stream"); } }); Parallel.For(0, msgCount, (i, state) => { // ReSharper disable once AccessToDisposedClosure m_sut.Enqueue("a message", "channel"); }); m_sut.WaitForIdle(); Assert.True(sendToKinesisHasBeenCalled); Assert.Equal(0, m_sut.GetPendingMessageCount()); Assert.Equal(msgCount, m_sut.EnqueuedMessageCount); Assert.Equal(msgCount, m_sut.SentMessageCount); m_sut.Dispose(); }
public async Task SendBatchMessages() { using (var queue = ServiceBusEntityFactory.DeleteAndCreateQueue("integration-queue-sender")) { var id1 = Guid.NewGuid().ToString(); var id2 = Guid.NewGuid().ToString(); var id3 = Guid.NewGuid().ToString(); var sender = new QueueMessageSender(queue.Client); await sender.SendBatchAsync(new [] { new BrokeredMessage { MessageId = id1 }, new BrokeredMessage { MessageId = id2 }, new BrokeredMessage { MessageId = id3 } }); var messages = queue.Client.ReceiveBatch(250).ToArray(); Assert.Equal(3, messages.Length); Assert.True(messages.Any(m => m.MessageId == id1)); Assert.True(messages.Any(m => m.MessageId == id2)); Assert.True(messages.Any(m => m.MessageId == id3)); } }
public async Task RunTest() { Console.WriteLine("About to Create Queue named " + config.QueuePath); await mgt.CreateQueueAsync(new QueueDescription(config.QueuePath) { DefaultMessageTimeToLive = TimeSpan.FromSeconds(5), EnableDeadLetteringOnMessageExpiration = false }, true);; Console.WriteLine("Queue Created. Sending a message"); QueueMessageSender sender = new QueueMessageSender(config.ConnectionString, config.QueuePath); QueueMessageReceiver receiver = new QueueMessageReceiver(config.ConnectionString, config.QueuePath, false); await sender.SendMessage("first message"); Console.WriteLine("Message Sent, Going to receive it now"); string message = await receiver.GetSingleMessage(); Console.WriteLine("Message Received: " + (message ?? "<NULL>")); Console.WriteLine("Sending second message"); await sender.SendMessage("second message"); Console.WriteLine("Message Sent, Going to sleep for 6 seconds"); Thread.Sleep(6000); Console.WriteLine("I'm Back, receiving message"); message = await receiver.GetSingleMessage(); Console.WriteLine("Message Received: " + (message ?? "<NULL>")); Console.WriteLine("Hit Enter to Continue and Delete Queue"); Console.ReadLine(); await mgt.DeleteQueueAsync(config.QueuePath); }
public async Task SetUp() { _queueTestContext = new QueueTestContext(); await _queueTestContext.SetUpAsync(); _subject = new QueueMessageSender(Options.Create(_queueTestContext.GetConfiguration())); }
public void LargeNumberOfMessagesWithRetries() { var messagesFailed = false; var writeHasBeenCalled = false; var tempList = new List <Message>(); const int msgCount = 30000; const int failedMsgCount = 500; const int retryCount = 2; for (var i = 0; i < failedMsgCount; i++) { tempList.Add(new Message { Payload = "payload" }); } var iteration = 0; m_proxy.Setup(x => x.WriteAsync(It.IsAny <List <Message> >(), It.IsAny <string>())) .ReturnsAsync(() => { if (iteration++ < retryCount) { messagesFailed = true; return(tempList); } return(new List <Message>()); }); m_sut = new QueueMessageSender(m_settings, m_logger.Object); m_sut.AddMessageHandler(new CustomMessageHandler { Func = async(messages, streamName) => { writeHasBeenCalled = true; return(await m_proxy.Object.WriteAsync(messages, streamName)); } }); for (var i = 0; i < msgCount; i++) { m_sut.Enqueue("a message", "channel"); } m_sut.WaitForIdle(); Assert.True(messagesFailed); Assert.True(writeHasBeenCalled); Assert.Equal(0, m_sut.GetPendingMessageCount()); Assert.Equal(msgCount + retryCount * failedMsgCount, m_sut.EnqueuedMessageCount); Assert.Equal(msgCount, m_sut.SentMessageCount); m_sut.Dispose(); }
public async Task SendMessage() { using (var queue = ServiceBusEntityFactory.DeleteAndCreateQueue("integration-queue-sender")) { var id = Guid.NewGuid().ToString(); var sender = new QueueMessageSender(queue.Client); await sender.SendAsync(new BrokeredMessage { MessageId = id }); var messages = queue.Client.ReceiveBatch(250).ToArray(); Assert.Equal(1, messages.Length); Assert.Equal(id, messages[0].MessageId); } }
public static async Task DoSendAndReceive(string connectionString, string queueName) { var sender = new QueueMessageSender(connectionString, queueName); var receiver = new QueueMessageReceiver(connectionString, queueName, true); Console.WriteLine($"Queue Length = {receiver.GetActiveQueueLength()}"); await sender.SendMessage("message 1"); await sender.SendMessage("message 2"); await sender.SendMessage("message 3"); await sender.SendMessage("message 4"); await sender.SendMessage("message 5"); await sender.SendMessage("message 6"); Console.WriteLine($"Queue Length = {await receiver.GetActiveQueueLength()}"); int numToFail = 3; int numFailed = 0; receiver.HandleMessageAndReturnIfSuccess += (msg) => { Console.WriteLine($"Message Received: {msg}"); return((++numFailed) >= numToFail); }; receiver.StartReceivingMessages(); Console.WriteLine($"Queue Length = {await receiver.GetActiveQueueLength()}"); System.Threading.Thread.Sleep(1000); Console.WriteLine($"Queue Length = {await receiver.GetActiveQueueLength()}"); Console.WriteLine($"DL Length = {await receiver.GetDeadLetterCount()}"); var dlmsg = await receiver.GetDeadLetterMessage(); Console.WriteLine($"Dead Letter Received: {dlmsg}"); }
public void TwoChannelsDifferentWeightManyMessages() { var sendToKinesisHasBeenCalled = false; const int msgCount = 10000; m_proxy.Setup(x => x.WriteAsync(It.IsAny <List <Message> >(), It.IsAny <string>())) .ReturnsAsync(new List <Message>()); m_sut = new QueueMessageSender(m_settings, m_logger.Object); m_sut.AddMessageHandler(new ChannelSpecificMessageHandler { Action = async(messages, streamName) => { sendToKinesisHasBeenCalled = true; await m_proxy.Object.WriteAsync(messages, streamName); } }); m_sut.SetChannelWeight(1.5f, "kinesis"); m_sut.SetChannelWeight(2, "another_kinesis"); Parallel.For(0, msgCount, (i, state) => { // ReSharper disable once AccessToDisposedClosure m_sut.Enqueue("a message", "kinesis"); }); Parallel.For(0, msgCount, (i, state) => { // ReSharper disable once AccessToDisposedClosure m_sut.Enqueue("a message", "another_kinesis"); }); m_sut.WaitForIdle(); Assert.True(sendToKinesisHasBeenCalled); Assert.Equal(0, m_sut.GetPendingMessageCount()); Assert.Equal(2 * msgCount, m_sut.EnqueuedMessageCount); Assert.Equal(2 * msgCount, m_sut.SentMessageCount); m_sut.Dispose(); }
public void MessagesAreSent() { var sendToKinesisHasBeenCalled = false; m_proxy.Setup(x => x.WriteAsync(It.IsAny <List <Message> >(), It.IsAny <string>())) .ReturnsAsync(new List <Message>()); m_sut = new QueueMessageSender(m_settings, m_logger.Object); m_sut.AddMessageHandler(new GlobalMessageHandler { Action = async messages => { sendToKinesisHasBeenCalled = true; await m_proxy.Object.WriteAsync(messages, "stream"); } }); m_sut.Enqueue("a message", "channel"); m_sut.WaitForIdle(); Assert.True(sendToKinesisHasBeenCalled); Assert.Equal(0, m_sut.GetPendingMessageCount()); m_sut.Dispose(); }
static async Task Main(string[] args) { string to = "*****@*****.**"; string from = "*****@*****.**"; string subject = "Using the new SMTP client."; string body = @"Using this new feature, you can send an email message from an application very easily."; MailMessage message = new MailMessage(from, to, subject, body); var server = "smtp.socketlabs.com"; SmtpClient client = new SmtpClient(server, 2525); // Credentials are necessary if the server requires the client // to authenticate before it will send email on the client's behalf. client.Credentials = new NetworkCredential("server33448", "y8P7Ywk6DKn5x9S2"); client.Send(message); Console.WriteLine("Done!"); var smtpClient = new SmtpClient("smtp.socketlabs.com", 25); smtpClient.UseDefaultCredentials = false; smtpClient.Credentials = new NetworkCredential("server33448", "y8P7Ywk6DKn5x9S2"); var mailManager = new MailManager(smtpClient, (s, e) => { Console.WriteLine("message handler"); String token = (string)e.UserState; if (e.Cancelled) { Console.WriteLine("[{0}] Send canceled.", token); } if (e.Error != null) { Console.WriteLine("[{0}] {1}", token, e.Error.ToString()); } else { Console.WriteLine("Message sent."); } }); // var client = new RestClient("https://inject.socketlabs.com/api/v1/email"); // var request = new RestRequest(Method.POST); // request.AddHeader("content-type", "application/json"); // request.AddParameter("application/json", "{\"serverId\":\"string (required)\",\"APIKey\":\"string (required)\",\"Messages\":[{\"To\":[{\"emailAddress\":\"string (required)\",\"friendlyName\":\"string (optional)\"}],\"From\":{\"emailAddress\":\"string (required)\",\"friendlyName\":\"string (optional)\"},\"ReplyTo\":{\"emailAddress\":\"string (required)\",\"friendlyName\":\"string (optional)\"},\"Subject\":\"string (required)\",\"TextBody\":\"string (optional)\",\"HtmlBody\":\"string (optional)\",\"ApiTemplate\":\"string (optional)\",\"MessageId\":\"string (optional)\",\"MailingId\":\"string (optional)\",\"Charset\":\"string (optional)\",\"CustomHeaders\":[{\"Name\":\"string (optional)\",\"Value\":\"string (optional)\"}],\"CC\":[{\"emailAddress\":\"string (optional)\",\"friendlyName\":\"string (optional)\"}],\"BCC\":[{\"emailAddress\":\"string (optional)\",\"friendlyName\":\"string (optional)\"}],\"Attachments\":[{\"Name\":\"string (optional)\",\"Content\":\"string (optional)\",\"ContentId\":\"string (optional)\",\"ContentType\":\"string (optional)\",\"CustomHeaders\":[{\"Name\":\"string (optional)\",\"Value\":\"string (optional)\"}]}],\"MergeData\":{\"PerMessage\":[[{\"Field\":\"string (optional)\",\"Value\":\"string (optional)\"}]],\"Global\":[{\"Field\":\"string (optional)\",\"Value\":\"string (optional)\"}]}}]}", ParameterType.RequestBody); // IRestResponse response = client.Execute(request); Console.WriteLine("Sending emails "); await mailManager.SendMailAsync(); var d = new DataMessage { Name = "jeremy" + DateTime.Now, Email = "*****@*****.**" }; queueClient = new QueueClient(ServiceBusConnectionString, QueueName); var qms = new QueueMessageSender(queueClient); await qms.SendMessagesAsync(MessageConverter.Serialize(d)); Console.WriteLine($"Send message. {d.Name}"); await queueClient.CloseAsync(); }