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); }
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); }