public async Task <int> Execute()
        {
            try
            {
                var configuration        = new RabbitMQHostConfiguration();
                var configurationManager = new RabbitMQHostConfigurationManager();
                await configurationManager.Initialize(configuration);

                var pingHandler = new PingHandler(Id);
                configuration.AddHandlingRules(pingHandler, (ht, mt) => "Pings");

                var cancellationTokenSource = new CancellationTokenSource();
                var cancellationToken       = cancellationTokenSource.Token;
                using (var host = RabbitMQHost.Start(configuration, cancellationToken))
                {
                    Console.WriteLine($"[{Id}] Listening...");
                    await Execute(host, cancellationToken);

                    await UserInterrupt.Wait(cancellationToken);
                }
                cancellationTokenSource.Cancel();
            }
            catch (OperationCanceledException)
            {
                // Ignore
            }
            Console.WriteLine($"[{Id}] Stopping...");
            return(0);
        }