public async Task Handle(T message, IMessageHandlerContext context)
        {
            var messageType = message.GetType().Name;

            logger.LogInfo($"Processing {messageType} event. Ukprn: {message.Ukprn}");
            ((ESFA.DC.Logging.ExecutionContext)executionContext).JobId = message.JobId.ToString();

            if (message.Ukprn == 0)
            {
                throw new ArgumentException($"Ukprn cannot be 0. Job Id: {message.JobId}");
            }

            logger.LogDebug($"Getting AccountId for Ukprn: {message.Ukprn}.");
            var accountIds = await repository.GetEmployerAccountsByUkprn(message.Ukprn).ConfigureAwait(false);

            var tasks = new List <Task>();

            foreach (var account in accountIds)
            {
                var accountToUse = levyMessageRoutingService.GetDestinationAccountId(account.Item1, account.Item2);
                tasks.Add(InvokeSubmissionAction(accountToUse, message));
            }

            await Task.WhenAll(tasks).ConfigureAwait(false);

            logger.LogInfo($"Successfully processed {messageType} for Job: {message.JobId}, UKPRN: {message.Ukprn}. Skipped submission removing as no account ID found.");
        }