예제 #1
0
        public override void Run()
        {
            Trace.TraceInformation("MSGorilla.MailDispatcher entry point called");

            _mailboxCache   = new MemoryCache("mailbox");
            _mailStoreCache = new MemoryCache("mailstore");
            _groupID2Name   = new Dictionary <string, string>();
            _topicManager   = new TopicManager();
            _groupManager   = new GroupManager();
            _accountManager = new AccountManager();
            _richMsgManager = new RichMsgManager();

            CloudQueue _queue = AzureFactory.GetQueue(AzureFactory.MSGorillaQueue.MailMessage);;

            while (true)
            {
                try
                {
                    CloudQueueMessage message = _queue.GetMessage();
                    while (message == null)
                    {
                        Thread.Sleep(1000);
                        message = _queue.GetMessage();
                    }
                    _queue.UpdateMessage(message,
                                         TimeSpan.FromSeconds(60.0 * 1), // Make it in five minutes
                                         MessageUpdateFields.Visibility);

                    Message msg = JsonConvert.DeserializeObject <Message>(message.AsString);

                    DispatchMail(msg);

                    _queue.DeleteMessage(message);
                }
                catch (Exception e)
                {
                    Trace.TraceError("Exception in worker role", e.StackTrace);
                }
            }
        }