static IBusControl ConfigureBus(IRegistrationContext <IServiceProvider> provider)
        {
            AppConfig = provider.GetRequiredService <IOptions <AppConfig> >().Value;

            return(Bus.Factory.CreateUsingRabbitMq(cfg =>
            {
                IRabbitMqHost host = cfg.Host(AppConfig.Host, AppConfig.VirtualHost, h =>
                {
                    h.Username(AppConfig.Username);
                    h.Password(AppConfig.Password);
                });

                // 1. Configuring consistent exchange

                string consistentExchangeName = "x-consistent-hash";
                DeclareConsistentExchange(host, consistentExchangeName);

                // 2. Configuring endpoints bindings to queues
                cfg.ReceiveEndpoint("qq1", ep =>
                {
                    ep.ConfigureConsumeTopology = false;
                    ep.Bind(
                        "x-consistent-hash",
                        x =>
                    {
                        x.Durable = true;
                        x.ExchangeType = "x-consistent-hash";
                        x.RoutingKey = "10";
                    });

                    ep.PrefetchCount = 1;

                    ep.Consumer <QuoteCreatedConsumer1>(provider.Container);
                });

                cfg.ReceiveEndpoint("qq2", ep =>
                {
                    ep.ConfigureConsumeTopology = false;
                    ep.Bind(
                        "x-consistent-hash",
                        x =>
                    {
                        x.Durable = true;
                        x.ExchangeType = "x-consistent-hash";
                        x.RoutingKey = "10";
                    });

                    ep.PrefetchCount = 1;

                    ep.Consumer <QuoteCreatedConsumer2>(provider.Container);
                });

                // 3. Binding message endpoints to consistent exchange
                cfg.ConnectBusObserver(new BindIncomingMessageExchangeAction(
                                           host,
                                           consistentExchangeName,
                                           typeof(IQuoteCreated)
                                           ));
            }));
        }
        private static IBusControl ConfigureBus(IRegistrationContext <IServiceProvider> provider)
        {
            AppConfig = provider.GetRequiredService <IOptions <AppConfig> >().Value;

            return(Bus.Factory.CreateUsingRabbitMq(cfg =>
            {
                var host = cfg.Host(AppConfig.Host, AppConfig.VirtualHost, h =>
                {
                    h.Username(AppConfig.Username);
                    h.Password(AppConfig.Password);
                });

                cfg.ConfigureEndpoints(provider);
            }));
        }