Beispiel #1
0
 public PrepareMessageContextForPublish(
     ISerializer serializer,
     RabbitMqBusConfiguration busConfiguration)
 {
     _serializer       = serializer;
     _busConfiguration = busConfiguration;
 }
Beispiel #2
0
        public static IServiceBus Create(
            Action <IMassInstanceBusFactoryConfigurator> configure,
            IMassInstanceConsumerFactory consumerFactory)
        {
            var topologyConfiguration    = new RabbitMqTopologyConfiguration(MessageTopology);
            var busConfiguration         = new RabbitMqBusConfiguration(topologyConfiguration);
            var busEndpointConfiguration = busConfiguration.CreateEndpointConfiguration();

            var sagaMessageExtractor = new SagaMessageExtractor();

            var configurator = new MassInstanceBusFactoryConfigurator(
                busConfiguration,
                busEndpointConfiguration,
                consumerFactory,
                sagaMessageExtractor);

            configure(configurator);

            var result = BusConfigurationResult.CompileResults(configurator.Validate());

            try
            {
                return(configurator.CreateBus());
            }
            catch (Exception ex)
            {
                throw new ConfigurationException(result, "An exception occurred during bus creation", ex);
            }
        }
        private async Task StartClient()
        {
            var config = new RabbitMqBusConfiguration(ConnectionString, RoutingKey, Headers);

            var client = await _messageReceiverClientFactory.GetReceiverAsync(config);

            client.StartClient();
        }
Beispiel #4
0
        protected override async ValueTask <IActivityExecutionResult> OnExecuteAsync(ActivityExecutionContext context)
        {
            var config = new RabbitMqBusConfiguration(ConnectionString, RoutingKey, Headers);

            var client = await _messageSenderClientFactory.GetSenderAsync(config);

            await client.PublishMessage(Message);

            return(Done());
        }
        /// <summary>
        /// Configure and create a bus for RabbitMQ
        /// </summary>
        /// <param name="configure">The configuration callback to configure the bus</param>
        /// <returns></returns>
        public static IBusControl Create(Action <IRabbitMqBusFactoryConfigurator> configure = null)
        {
            var topologyConfiguration = new RabbitMqTopologyConfiguration(MessageTopology);
            var busConfiguration      = new RabbitMqBusConfiguration(topologyConfiguration);

            var configurator = new RabbitMqBusFactoryConfigurator(busConfiguration);

            configure?.Invoke(configurator);

            return(configurator.Build());
        }
        /// <summary>
        /// Configure and create a bus for RabbitMQ
        /// </summary>
        /// <param name="configure">The configuration callback to configure the bus</param>
        /// <returns></returns>
        public static IBusControl Create(Action <IRabbitMqBusFactoryConfigurator> configure)
        {
            var topologyConfiguration    = new RabbitMqTopologyConfiguration(MessageTopology);
            var busConfiguration         = new RabbitMqBusConfiguration(topologyConfiguration);
            var busEndpointConfiguration = busConfiguration.CreateEndpointConfiguration();

            var configurator = new RabbitMqBusFactoryConfigurator(busConfiguration, busEndpointConfiguration);

            configure(configurator);

            return(configurator.Build());
        }
Beispiel #7
0
        public RabbitMqConnection(RabbitMqBusConfiguration busConfiguration, ILogger <RabbitMqConnection> logger)
        {
            _logger           = logger;
            _busConfiguration = busConfiguration;

            //setup connection and channels
            _factory = new ConnectionFactory
            {
                Uri = new Uri(busConfiguration.ConnectionString),
                AutomaticRecoveryEnabled = true //wanted this to be explicit.
            };

            SetupGlobalExchanges();
        }
        public static RabbitMqHostSettings ToRabbitMqHostSettings(this RabbitMqBusConfiguration configuration)
        {
            var hostConfiguration = new RabbitMqHostConfigurator(configuration.Host, configuration.VirtualHost, (ushort)configuration.Port)
            {
                PublisherConfirmation = true
            };

            if (!string.IsNullOrEmpty(configuration.Username))
            {
                hostConfiguration.Username(configuration.Username);
            }
            if (!string.IsNullOrEmpty(configuration.Password))
            {
                hostConfiguration.Password(configuration.Password);
            }
            if (configuration.UseSsl)
            {
                hostConfiguration.UseSsl((x) => { x.Protocol = System.Security.Authentication.SslProtocols.Tls12; });
            }

            return(hostConfiguration.Settings);
        }
Beispiel #9
0
        private static void RegisterBus(IServiceCollection serviceCollection, IServiceProvider serviceProvider)
        {
            var busConfiguration = RabbitMqBusConfiguration.Parse(serviceBusConnectionString);

            var provisionUserWithSingleGroupSaga    = new ProvisionUserWithSingleGroupSaga();
            var provisionUserWithMultipleGroupsSaga = new ProvisionUserWithMultipleGroupsSaga();
            var provisionUserWithApprovalSaga       = new ProvisionUserWithApprovalSaga();

            var bus = Bus.Factory.CreateUsingRabbitMq(sbc =>
            {
                var host = sbc.Host(busConfiguration.ToRabbitMqHostSettings());

                sbc.ReceiveEndpoint(host, Constants.SagaPattern.QueueNames.ProvisionUserWithSingleGroupService, configurator =>
                {
                    configurator.UseRetry(retryConfigurator =>
                                          retryConfigurator.Incremental(3, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(10)));

                    configurator.StateMachineSaga(provisionUserWithSingleGroupSaga,
                                                  new MongoDbSagaRepository <ProvisionUserWithSingleGroupSagaState>(mongoDbConnectionString, "SagaToServerless",
                                                                                                                    Constants.CollectionNames.ProvisionUserWithSingleGroupSagas));
                });
                sbc.ReceiveEndpoint(host, Constants.SagaPattern.QueueNames.ProvisionUserWithMultipleGroupsService, configurator =>
                {
                    configurator.UseRetry(retryConfigurator =>
                                          retryConfigurator.Incremental(3, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(10)));

                    configurator.StateMachineSaga(provisionUserWithMultipleGroupsSaga,
                                                  new MongoDbSagaRepository <ProvisionUserWithMultipleGroupsSagaState>(mongoDbConnectionString, "SagaToServerless",
                                                                                                                       Constants.CollectionNames.ProvisionUserWithMultipleGroupSagas));
                });
                sbc.ReceiveEndpoint(host, Constants.SagaPattern.QueueNames.ProvisionUserWithApprovalService, configurator =>
                {
                    configurator.UseRetry(retryConfigurator =>
                                          retryConfigurator.Incremental(3, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(10)));

                    configurator.StateMachineSaga(provisionUserWithApprovalSaga,
                                                  new MongoDbSagaRepository <ProvisionUserWithApprovalSagaState>(mongoDbConnectionString, "SagaToServerless",
                                                                                                                 Constants.CollectionNames.ProvisionUserWithApprovalSagas));
                });
                sbc.ReceiveEndpoint(host, Constants.SagaPattern.QueueNames.UsersHandlerQueue, configurator =>
                {
                    configurator.UseRetry(retryConfigurator =>
                                          retryConfigurator.Incremental(3, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(10)));

                    configurator.Consumer(() => new UsersHandler(serviceProvider.GetRequiredService <IUserService>()));
                });
                sbc.ReceiveEndpoint(host, Constants.SagaPattern.QueueNames.GroupsHandlerQueue, configurator =>
                {
                    configurator.UseRetry(retryConfigurator =>
                                          retryConfigurator.Incremental(3, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(10)));

                    configurator.Consumer(() => new GroupsHandler(serviceProvider.GetRequiredService <IGroupService>()));
                });
                sbc.ReceiveEndpoint(host, Constants.SagaPattern.QueueNames.NotificationsHandlerQueue, configurator =>
                {
                    configurator.UseRetry(retryConfigurator =>
                                          retryConfigurator.Incremental(3, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(10)));

                    configurator.Consumer(() => new NotificationsHandler(serviceProvider.GetRequiredService <ISendGridService>()));
                });
                sbc.ReceiveEndpoint(host, Constants.SagaPattern.QueueNames.ProvisionUserHandlerQueue, configurator =>
                {
                    configurator.UseRetry(retryConfigurator =>
                                          retryConfigurator.Incremental(3, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(10)));

                    configurator.Consumer(() => new ProvisionUserHandler());
                });
                sbc.ReceiveEndpoint(host, Constants.SagaPattern.QueueNames.ApprovalHandlerQueue, configurator =>
                {
                    configurator.UseRetry(retryConfigurator =>
                                          retryConfigurator.Incremental(3, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(10)));

                    configurator.Consumer(() => new ApprovalHandler());
                });
            });

            bus.Start();
            serviceCollection.AddSingleton <IBus>(bus);
            serviceCollection.AddSingleton <IBusControl>(bus);

            serviceProvider = serviceCollection.BuildServiceProvider();
        }
Beispiel #10
0
 public Client(RabbitMqBusConfiguration configuration)
 {
     Configuration = configuration;
     _activator    = new BuiltinHandlerActivator();
 }
 public RabbitMq()
 {
     BusConfiguration = new RabbitMqBusConfiguration();
     Factory          = new RabbitMqTransportFactory();
 }