コード例 #1
0
ファイル: Microservice.cs プロジェクト: GrafGenerator/asb
        protected async Task <CommandExecutionResult> ProcessMessage(string message, CancellationToken token)
        {
            try
            {
                var messageJObject = JObject.Parse(message);
                var identity       = messageJObject.GetValue("identity", StringComparison.OrdinalIgnoreCase)?.Value <string>();

                if (string.IsNullOrEmpty(identity))
                {
                    return(CommandExecutionResult.Failure($"Failure while processing command, identity is missing, message: {message}"));
                }

                var result = await ProcessCommand(identity, message, token);

                switch (result.Status)
                {
                case CommandExecutionStatus.Undefined:
                    throw new MicroserviceException(
                              $"Cannot process command, identity '{identity}', body: {message}");

                case CommandExecutionStatus.NotRecognized:
                    throw new MicroserviceException(
                              "NotRecognized is never processed on this level, check the code!!!");

                case CommandExecutionStatus.Success:
                case CommandExecutionStatus.Failure:
                case CommandExecutionStatus.CriticalFailure:
                    return(result);

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            catch (OperationCanceledException e)
            {
                Console.WriteLine($"Service {Options.ServiceId}, cancellation requested. Cancellation exception: {e}");
                throw;
            }
            catch (MicroserviceException e)
            {
                var errorMessage = $"ATTENTION! CRITICAL EXCEPTION occured in service {Options.ServiceId} while processing message, exception: {e}, message text: {message}";
                Console.WriteLine(errorMessage);
                return(CommandExecutionResult.CriticalFailure(errorMessage, e));
            }
            catch (Exception e)
            {
                var errorMessage = $"Exception occured in service {Options.ServiceId} while processing message, exception: {e}, message text: {message}";
                Console.WriteLine(errorMessage);
                throw;
            }
        }