public static QueueingOptions UseRabbitMQQueue <TData>( this QueueingOptions options, Action <QueueingProviderOptions <TData> > optionsAction = null, TimeSpan?expiration = null, int?retries = null, string section = "naos:queueing:rabbitMQ") where TData : class { EnsureArg.IsNotNull(options, nameof(options)); EnsureArg.IsNotNull(options.Context, nameof(options.Context)); var queueName = typeof(TData).PrettyName(); var configuration = options.Context.Configuration.GetSection(section).Get <RabbitMQConfiguration>(); if (configuration?.Enabled == true) { var connectionFactory = new ConnectionFactory { Port = configuration.Port == 0 ? 5672 : configuration.Port, HostName = configuration.Host.IsNullOrEmpty() ? "localhost" : configuration.Host, // or 'rabbitmq' in docker-compose env UserName = configuration.UserName.IsNullOrEmpty() ? "guest" : configuration.UserName, Password = configuration.Password.IsNullOrEmpty() ? "guest" : configuration.Password, DispatchConsumersAsync = true, }; options.Context.Services.AddScoped <IQueue <TData> >(sp => { var provider = new RabbitMQProvider( sp.GetRequiredService <ILogger <RabbitMQProvider> >(), connectionFactory, configuration.RetryCount, $"{LogKeys.Queueing} {queueName} ({sp.GetService<Naos.Foundation.ServiceDescriptor>()?.Name})"); return(new RabbitMQQueue <TData>(o => o .Mediator(sp.GetService <IMediator>()) .Tracer(sp.GetService <ITracer>()) .LoggerFactory(sp.GetService <ILoggerFactory>()) .Provider(provider) .QueueName(queueName) .Expiration(expiration) .Retries(retries))); }); optionsAction?.Invoke( new QueueingProviderOptions <TData>(options.Context)); options.Context.Services.AddHealthChecks() .AddRabbitMQ(configuration.AsConnectionString(), null, $"queueing-provider-rabbitmq-{queueName}", tags: new[] { "naos" }); options.Context.Messages.Add($"naos services builder: queueing provider added (provider={nameof(RabbitMQQueue<TData>)}, queue={queueName})"); } else { throw new NaosException("no queueing rabbitmq is enabled"); } return(options); }
public PublishTest() { var _rabbitMQProvider = new RabbitMQProvider(new RabbitMQOptions { Host = "127.0.0.1", Port = 5672, Username = "******", Password = "******" }); _publish = new PublishService(_rabbitMQProvider); }
public ConsumeTest() { var _rabbitMQProvider = new RabbitMQProvider(new RabbitMQOptions { Host = "127.0.0.1", Port = 5672, Username = "******", Password = "******" }); _consume = new ConsumeService(_rabbitMQProvider); }
public static CommandRequestOptions UseRabbitMQQueue( this CommandRequestOptions options, string name = "commandrequests", TimeSpan?expiration = null, int?retries = null) { var queueName = typeof(CommandRequestWrapper).PrettyName(); var configuration = options.Context.Configuration.GetSection("naos:commands:rabbitMQQueue").Get <RabbitMQConfiguration>(); if (configuration?.Enabled == true) { var connectionFactory = new ConnectionFactory { Port = configuration.Port == 0 ? 5672 : configuration.Port, HostName = configuration.Host.IsNullOrEmpty() ? "localhost" : configuration.Host, // or 'rabbitmq' in docker-compose env UserName = configuration.UserName.IsNullOrEmpty() ? "guest" : configuration.UserName, Password = configuration.Password.IsNullOrEmpty() ? "guest" : configuration.Password, DispatchConsumersAsync = true, }; options.Context.Services.AddScoped <IQueue <CommandRequestWrapper> >(sp => { var provider = new RabbitMQProvider( sp.GetRequiredService <ILogger <RabbitMQProvider> >(), connectionFactory, configuration.RetryCount, $"{LogKeys.Queueing} {queueName} ({sp.GetService<Naos.Foundation.ServiceDescriptor>()?.Name})"); return(new RabbitMQQueue <CommandRequestWrapper>(o => o .Mediator(sp.GetService <IMediator>()) .Tracer(sp.GetService <ITracer>()) .LoggerFactory(sp.GetService <ILoggerFactory>()) .Serializer(new JsonNetSerializer(TypedJsonSerializerSettings.Create())) // needs type information in json to deserialize correctly (which is needed for mediator.send) .Provider(provider) .QueueName($"{options.Context.Descriptor.Name}-{name}") .Expiration(expiration) .Retries(retries))); }); } return(options); }