예제 #1
0
        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();
        }
예제 #2
0
        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();
        }
예제 #3
0
        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()));
        }
예제 #6
0
        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();
        }
예제 #7
0
        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);
            }
        }
예제 #8
0
        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}");
        }
예제 #9
0
        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();
        }
예제 #10
0
        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();
        }
예제 #11
0
        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();
        }