public async Task <List <Message> > Apply(List <Message> messages, int ruleId)
 {
     try
     {
         _loggingService.Log($"Rule {ruleId} has been recieved ");
         IMessageExpression messageExpression = MessageExppression.GetInstance(_loggingService, ruleId);
         _loggingService.Log($"Expression has been created for ruleId {ruleId}");
         IEngine engine = RuleEngine.Getnstance(_loggingService, messageExpression);
         _loggingService.Log($"Rule engine has nee created for ruleId {ruleId}");
         _loggingService.Log($"Applying the expression obatianed for ruleId {ruleId}");
         return(await engine.Apply(messages));
     }
     catch (Exception ex)
     {
         _loggingService.Log(ex);
         throw;
     }
 }