/// <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); }
/// <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(); } }
/// <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); }
/// <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); }