public Task OnMessage(Message theMessage)
        {
            Task returnTask;

            try {
                SyntheticMessageProcessor processor = new SyntheticMessageProcessor(_connectionString, _monitoringTopic, _logger);
                Task messageTask = processor.OnMessage(theMessage);
                returnTask = Task.WhenAll(new Task[] { messageTask });
            } catch (MonitoringException mex) {
                _logger.LogError($"ERROR - {mex.Message} {mex.StackTrace}");
                returnTask = Task.FromException(mex);
            } catch (Exception ex) {
                _logger.LogWarning($"Error scenario found in monitored service - {ex.Message}");

                string         dataJSON     = Encoding.UTF8.GetString(theMessage.Body);
                MonitorMessage errorMessage = JsonConvert.DeserializeObject <MonitorMessage>(dataJSON);
                errorMessage.AssociatedId = $"{errorMessage.AssociatedId}_DLQ";
                if (ts is null)
                {
                    ts = new SessionlessTopicSender(_connectionString, _monitoringTopic);
                }
                Task sendTask = ts.Send(JsonConvert.SerializeObject(errorMessage), theMessage.UserProperties["CollectionId"].ToString(), theMessage.UserProperties["Context"].ToString(), DateTime.MinValue, "SYNTHETIC_ERROR");
                returnTask = Task.WhenAll(new Task[] { sendTask });
            }

            return(returnTask);
        }
        public override Task ProcessMessagesWhenLastReceived(IList <string> listOfOriginalMessagesAsUTF8, Message lastMessage, IList <string> listOfProcessedMessagesAsUTF8)
        {
            Task returnTask;

            try {
                Task sendTask = ts.Send(listOfProcessedMessagesAsUTF8, lastMessage.UserProperties["CollectionId"].ToString(), lastMessage.UserProperties["Context"].ToString(), DateTime.MinValue, "LAST_SYNTHETIC_MESSAGE_PUBLISHED");
                returnTask = Task.WhenAll(new Task[] { sendTask });
            } catch (Exception ex) {
                MonitoringException exp = new MonitoringException($"ERROR in synthetic monitoring service - unable to process group of synthetic messages caused by {ex.Message}");
                _logger.LogError($"Failed to process group of synthetic messages - {ex.Message} {ex.StackTrace}");
                throw exp;
            }

            return(returnTask);
        }