Example #1
0
        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);
        }
Example #2
0
 /// <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;
 }
Example #3
0
 public ASampleRabbitMqClient(IConnection connection, IConfiguration configuration)//
 {
     this.Connection = connection;
     //this._Options = configuration.GetSection("rabbitma").Bind(new RabbitMqOption());
     Options = configuration.GetOptions <RabbitMqOption>("rabbitmq");
 }
Example #4
0
 /// <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;
 }