Exemplo n.º 1
0
        private CalcMessage readNextMessage(IMsgBusContext queue)
        {
            CalcMessage message      = null;
            int         retryCount   = Int32.Parse(ConfigurationManager.AppSettings["QueueGetMessageRetry"]);
            int         retryWaitSec = Int32.Parse(ConfigurationManager.AppSettings["QueueGetMessageRetryWaitSec"]);

            try
            {
                while (retryCount > 0 && message == null)
                {
                    MsgBusPayload payload = queue.GetNextMessage();
                    --retryCount;
                    if (payload != null)
                    {
                        message = JsonConvert.DeserializeObject <CalcMessage>(payload.Payload);
                    }
                    else
                    {
                        Console.WriteLine(String.Format("{1} No message - waiting: retries left {0}", retryCount, DateTime.UtcNow.ToShortTimeString()));
                        System.Threading.Thread.Sleep(retryWaitSec * 1000);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(String.Format("{1} Exception while reading message: {0}", ex.Message, DateTime.UtcNow.ToShortTimeString()));
                message = null;
            }

            return(message);
        }
Exemplo n.º 2
0
        public void Start()
        {
            #region composition
            AggregateCatalog catalog          = new AggregateCatalog();
            DirectoryCatalog directoryCatalog = new DirectoryCatalog(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
            catalog.Catalogs.Add(directoryCatalog);
            catalog.Catalogs.Add(new AssemblyCatalog(typeof(SampleHeavyCalc).Assembly));
            CompositionContainer = new CompositionContainer(catalog);

            CompositionContainer.ComposeParts(this);

            #endregion


            CloudStorageAccount account = createCloudStorageAccount();
            CloudBlobClient     client  = account.CreateCloudBlobClient();

            CloudBlobContainer container = getBlobContainer(client, ConfigurationManager.AppSettings["ContainerInput"]);

            CalcMessage message = null;

            IMsgBusContext msgBusContext = prepareMsgBusConext();

            do
            {
                message = readNextMessage(msgBusContext);
                if (message != null)
                {
                    string inputFileName = message.InputFileName;

                    List <decimal> inputs = getInput(container, inputFileName);

                    List <decimal> outputs = process(inputs);

                    writeOutput(container, inputFileName, outputs);
                }
            }while (message != null);
        }