コード例 #1
0
        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);
        }
コード例 #2
0
        public RabbitMqEventBusPublisher(IRabbitMqPersistConnection connectFactory, IEventSubscriptionsManager manager)
        {
            _connectFactory = connectFactory;
            _manager        = manager;

            if (!_connectFactory.isConnected)
            {
                _connectFactory.TryConnect();
            }

            _channel = _connectFactory.Createchannel();

            _channel.ExchangeDeclare(GB_EXCHANGE, "direct");
        }