Example #1
0
        /// <summary>
        /// Configures sender to use a connection string
        /// </summary>
        /// <param name="builder">
        /// The builder.
        /// </param>
        /// <param name="connectionString">
        /// The connection string.
        /// </param>
        /// <returns>
        /// The <see cref="ISenderConfigurator"/>.
        /// </returns>
        public static ISenderConfigurator WithConnectionString(this ISenderConfigurator builder, string connectionString)
        {
            var senderConfiguration = (SenderConfiguration)builder;
            var rabbitSenderOptions = (RabbitSenderOptions)senderConfiguration.Options;

            // Need to set the callback sender's connection string to use the same connection string both in sender and receiver in request-response scenario
            senderConfiguration.WithCallbackConnectionString(connectionString);
            rabbitSenderOptions.ConnectionString = connectionString;

            return(builder);
        }
        /// <summary>
        /// Configures sender to use a connection string
        /// </summary>
        /// <param name="builder">
        /// The builder.
        /// </param>
        /// <param name="connectionString">
        /// The connection string.
        /// </param>
        /// <returns>
        /// The <see cref="ISenderConfigurator"/>.
        /// </returns>
        public static ISenderConfigurator WithConnectionString(this ISenderConfigurator builder, string connectionString)
        {
            var senderConfiguration = (SenderConfiguration)builder;
            var rabbitSenderOptions = (RabbitSenderOptions)senderConfiguration.Options;

            // The connection string should not be overridden if the connection string provider is present and it does not return nulls
            var provider = rabbitSenderOptions.GetConnectionStringProvider();

            if (!string.IsNullOrEmpty(provider?.GetConnectionString(senderConfiguration.Label)))
            {
                return(builder);
            }

            // Need to set the callback sender's connection string to use the same connection string both in sender and receiver in request-response scenario
            senderConfiguration.WithCallbackConnectionString(connectionString);
            rabbitSenderOptions.ConnectionString = connectionString;

            return(builder);
        }
Example #3
0
        /// <summary>
        /// The configure bus.
        /// </summary>
        /// <param name="cfg">
        /// The cfg.
        /// </param>
        private static void ConfigureBus(IBusConfigurator cfg)
        {
            cfg.UseRabbitMq();
            cfg.SetEndpoint(Params.Endpoint);
            cfg.SetConnectionString(Params.ConnectionString);
            cfg.UseParallelismLevel(Params.ParallelismLevel);

            ISenderConfigurator routeCfg = cfg.Route(Params.Type).
                                           WithDefaultCallbackEndpoint().
                                           Persistently();

            if (Params.RequireConfirmation)
            {
                routeCfg.WithConfirmation();
            }

            routeCfg = cfg.Route("bad.msg").
                       WithDefaultCallbackEndpoint();
            if (Params.RequireConfirmation)
            {
                routeCfg.WithConfirmation();
            }
        }
Example #4
0
        /// <summary>
        /// Конфигурирует клиента шины сообщений.
        /// </summary>
        /// <param name="endpointName">
        /// Имя точки подключения к шине.
        /// </param>
        /// <param name="cfg">
        /// Конфигуратор клиента шины.
        /// </param>
        /// <returns>
        /// Конфигуратор клиента шины, после применения к нему всех настроек.
        /// </returns>
        public IBusConfigurator Configure(string endpointName, IBusConfigurator cfg)
        {
            if (cfg == null)
            {
                throw new ArgumentNullException("cfg", "Файл конфигурации не может быть null");
            }

            EndpointElement endpointConfig = this.GetEndPointByName(endpointName);

            cfg.SetEndpoint(endpointConfig.Name);

            cfg.SetConnectionString(endpointConfig.ConnectionString);

            if (!string.IsNullOrWhiteSpace(endpointConfig.LifecycleHandler))
            {
                cfg.HandleLifecycleWith(this.ResolveLifecycleHandler(endpointConfig.LifecycleHandler));
            }

            if (endpointConfig.Caching != null && endpointConfig.Caching.Enabled)
            {
                cfg.EnableCaching();
            }

            if (endpointConfig.ParallelismLevel.HasValue)
            {
                cfg.UseParallelismLevel(endpointConfig.ParallelismLevel.Value);
            }

            if (endpointConfig.Dynamic != null)
            {
                if (endpointConfig.Dynamic.Outgoing.HasValue)
                {
                    if (endpointConfig.Dynamic.Outgoing.Value)
                    {
                        cfg.Route(MessageLabel.Any)
                        .ConfiguredWith(builder => new LambdaRouteResolver(
                                            (endpoint, label) =>
                        {
                            builder.Topology.Declare(
                                Exchange.Named(label.Name)
                                .Durable.Fanout);
                            return(new RabbitRoute(label.Name));
                        }));
                    }
                }
            }

            if (endpointConfig.Qos != null)
            {
                if (endpointConfig.Qos.PrefetchCount.HasValue)
                {
                    cfg.SetDefaultQoS(endpointConfig.Qos.PrefetchCount.Value);
                }
            }

            foreach (ValidatorElement validator in endpointConfig.Validators)
            {
                if (validator.Group)
                {
                    MessageValidatorGroup v = this.ResolveValidatorGroup(validator.Name);
                    cfg.RegisterValidators(v);
                }
                else
                {
                    IMessageValidator v = this.ResolveValidator(validator.Name);
                    cfg.RegisterValidator(v);
                }
            }

            foreach (OutgoingElement message in endpointConfig.Outgoing)
            {
                ISenderConfigurator senderCfg = cfg.Route(message.Label).
                                                WithAlias(message.Key);

                if (message.Confirm)
                {
                    senderCfg.WithConfirmation();
                }

                if (message.Persist)
                {
                    senderCfg.Persistently();
                }

                if (message.Ttl.HasValue)
                {
                    senderCfg.WithTtl(message.Ttl.Value);
                }

                if (message.CallbackEndpoint.Default)
                {
                    senderCfg.WithDefaultCallbackEndpoint();
                }

                if (message.Timeout.HasValue)
                {
                    senderCfg.WithRequestTimeout(message.Timeout);
                }
            }

            foreach (IncomingElement message in endpointConfig.Incoming)
            {
                IReceiverConfigurator receiver = cfg.On(message.Label).
                                                 WithAlias(message.Key);

                if (message.RequiresAccept)
                {
                    receiver.RequiresAccept();
                }

                Type messageType = typeof(ExpandoObject);
                if (!string.IsNullOrWhiteSpace(message.Type))
                {
                    messageType = ResolveType(message.Type);
                }

                var consumerFactory = this.BuildConsumerFactory(message.React, messageType);

                object consumer = BuildConsumer(consumerFactory, messageType, message.Lifestyle);

                RegisterConsumer(receiver, messageType, consumer);

                if (!string.IsNullOrWhiteSpace(message.Validate))
                {
                    IMessageValidator validator = this.ResolveValidator(message.Validate, messageType);

                    receiver.WhenVerifiedBy(validator);
                }
            }

            return(cfg);
        }
Example #5
0
 /// <summary>
 /// Configures sender to reuse a connection.
 /// </summary>
 /// <param name="builder">
 /// The builder.
 /// </param>
 /// <param name="reuse">
 /// The reuse.
 /// </param>
 /// <returns>
 /// The <see cref="ISenderConfigurator"/>.
 /// </returns>
 public static ISenderConfigurator ReuseConnection(this ISenderConfigurator builder, bool reuse = true)
 {
     ((RabbitSenderOptions)((SenderConfiguration)builder).Options).ReuseConnection = reuse;
     return(builder);
 }