public RabbitMqEventBusSubscriber(string queueName, IRabbitMqPersistConnection connectFactory, IEventSubscriptionsManager manager, ILifetimeScope autofac) { _connectFactory = connectFactory; _manager = manager; _queueName = queueName; _autofac = autofac; if (!_connectFactory.isConnected) { _connectFactory.TryConnect(); } _channel = _connectFactory.Createchannel(); _channel.ExchangeDeclare(GB_EXCHANGE, "direct"); _channel.QueueDeclare(queueName, true, false, false, null); var consumer = new EventingBasicConsumer(_channel); consumer.Received += (MetadataPropertyHandling, ea) => { var eventName = ea.RoutingKey; var body = ea.Body; var mess = Encoding.UTF8.GetString(body); Type eventType = _manager.GetEventTypeByName(eventName); var listenEvent = JsonConvert.DeserializeObject(mess, eventType); if (_manager.HasSubscriptionForEvent(eventName)) { using (var scope = _autofac.BeginLifetimeScope("GB_Scope_Name")) { List <SubscriptionInfo> subs = _manager.GetEventSubscriptionsInfo(eventName); foreach (SubscriptionInfo subscription in subs) { var handler = scope.ResolveOptional(subscription.HandlerType); if (handler == null) { continue; } typeof(IIntergrationEventHandler <>).MakeGenericType(eventType).GetMethod("Handle").Invoke(handler, new object[] { listenEvent }); } } } _channel.BasicAck(ea.DeliveryTag, false); }; _channel.BasicConsume(queue: queueName, autoAck: false, consumer: consumer); }
public RabbitMqEventBusPublisher(IRabbitMqPersistConnection connectFactory, IEventSubscriptionsManager manager) { _connectFactory = connectFactory; _manager = manager; if (!_connectFactory.isConnected) { _connectFactory.TryConnect(); } _channel = _connectFactory.Createchannel(); _channel.ExchangeDeclare(GB_EXCHANGE, "direct"); }
public EventBus(ILogger <EventBus> logger, IEventSubscriptionsManager substriptionsManager) { _logger = logger; _substriptionsManager = substriptionsManager; }