public async Task Consume(ConsumeContext <ExportFile> context) { try { var blobInfo = await blobStorage.GetFileInfo(context.Message.BlobId, context.Message.Bucket); if (blobInfo == null) { await context.Publish <ExportFailed>(new { Id = context.Message.Id, FileId = context.Message.BlobId, Bucket = context.Message.Bucket, Format = context.Message.Format, Message = $"Cannot find blob with id {context.Message.BlobId} in bucket {context.Message.Bucket}." }); return; } IChemicalExport exporter = null; switch (context.Message.Format.ToLower()) { case "sdf": exporter = new SdfExport(); break; case "csv": exporter = new CsvExport(); break; case "spl": exporter = new SplExport(); break; default: await context.Publish <ExportFailed>(new { Id = context.Message.Id, FileId = context.Message.BlobId, Bucket = context.Message.Bucket, Format = context.Message.Format, Message = $"Queried export format is not supported.", TimeStamp = DateTimeOffset.UtcNow }); return; } var fileName = $"{Path.GetFileNameWithoutExtension(blobInfo.FileName)}-" + //$"{DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ")}" + $".{context.Message.Format.ToLower()}"; if (exporter != null) { var blobId = NewId.NextGuid(); using (var stream = await blobStorage.OpenUploadStreamAsync(blobId, fileName, MimeType.GetFileMIME(context.Message.Format), context.Message.Bucket)) { var recordsEnumerator = await provider.GetRecords(context.Message.BlobId, context.Message.Bucket); await exporter.Export(recordsEnumerator, stream, context.Message.Properties, context.Message.Map); await stream.FlushAsync(); await context.Publish <ExportFinished>(new { Id = context.Message.Id, SourceBlobId = context.Message.BlobId, ExportBlobId = blobId, Filename = fileName, Format = context.Message.Format, ExportBucket = context.Message.Bucket, UserId = context.Message.UserId, TimeStamp = DateTimeOffset.UtcNow }); } } } catch (Exception e) { await context.Publish <ExportFailed>(new { Id = context.Message.Id, FileId = context.Message.BlobId, Bucket = context.Message.Bucket, Format = context.Message.Format, Message = $"File can not be exported. Details: {e.Message}", TimeStamp = DateTimeOffset.UtcNow }); } }