public static IServiceCollection AddMessageBus_(this IServiceCollection services, IConfiguration config, Assembly[] consumer_ass = null) { config.Should().NotBeNull(); consumer_ass ??= new Assembly[] { }; //找到所有消费 var all_consumer_types = consumer_ass.FindMessageConsumers(); //注册消费 services.AddMessageConsumers(all_consumer_types); //注册消息和配置的mapping var mapping = all_consumer_types.Select(x => new ConsumerDescriptor(x)).ToList().AsReadOnly(); services.AddSingleton(mapping); services.AddSingleton <IReadOnlyCollection <ConsumerDescriptor> >(mapping); //注册消费实现 var provider = config.GetMessageBusProvider(); if (provider == "redis") { //使用redis services.AddRedisMessageBus(); } else if (provider == "memory") { services.AddMemoryMeesageBus(); } else if (provider == "kafka") { throw new NotImplementedException(); } else { //使用rabbitmq var rabbit_config = config.GetRabbitmqOrThrow(); var option = new RabbitMqOption() { HostName = rabbit_config.ServerAndPort, UserName = rabbit_config.User, Password = rabbit_config.Password }; //注册所有消费 //services.AddRabbitmqConsumers(new Assembly[] { }); services.AddRabbitMq(option).AddRabbitmqMessageBus(); } return(services); }
/// <summary> /// Create default Rabbit connection /// </summary> /// <param name="logger"></param> /// <param name="option"></param> public DefaultRabbitMqPersistentConnection( ILogger <DefaultRabbitMqPersistentConnection> logger, RabbitMqOption option) { _connectionFactory = new ConnectionFactory { HostName = option.Server ?? throw new ArgumentNullException(nameof(option.Server)), }; if (!string.IsNullOrEmpty(option.UserName)) { _connectionFactory.UserName = option.UserName; } if (!string.IsNullOrEmpty(option.Password)) { _connectionFactory.Password = option.Password; } if (!string.IsNullOrEmpty(option.VirtualHost)) { _connectionFactory.VirtualHost = option.VirtualHost; } _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _retryCount = option.RetryCount; }
public ASampleRabbitMqClient(IConnection connection, IConfiguration configuration)// { this.Connection = connection; //this._Options = configuration.GetSection("rabbitma").Bind(new RabbitMqOption()); Options = configuration.GetOptions <RabbitMqOption>("rabbitmq"); }
/// <summary> /// Constrsuctor /// </summary> /// <param name="persistentConnection"></param> /// <param name="logger"></param> /// <param name="autofac"></param> /// <param name="subscriptionManager"></param> /// <param name="option"></param> public EventBusRabbitMq(IRabbitMqPersistentConnection persistentConnection, ILogger <EventBusRabbitMq> logger, ILifetimeScope autofac, IEventBusSubscriptionsManager subscriptionManager, RabbitMqOption option) { _queueName = option.Client ?? throw new ArgumentNullException(nameof(option.Client)); _brokerName = option.Exchange ?? throw new ArgumentNullException(nameof(option.Exchange)); _autofacScopeName = option.Scope ?? $"scope_{option.Exchange}_{option.Client}"; _persistentConnection = persistentConnection ?? throw new ArgumentNullException(nameof(persistentConnection)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _subscriptionsManager = subscriptionManager ?? new InMemoryEventBusSubscriptionsManager(); _autofac = autofac; _subscriptionsManager.OnEventRemoved += SubscriptionManager_OnEventRemoved; _consumerChannel = CreateConsumerChannel(); _retryCount = option.PublishRetryCount; }