Esempio n. 1
0
        /// <summary>
        /// 创建消费监听
        /// </summary>
        /// <returns></returns>
        private IModel CreateConsumerChannel()
        {
            // 已创建消费通道
            _createdConsumerChannel = true;

            if (!_persistentConnection.IsConnected)
            {
                _persistentConnection.TryConnect();
            }

            var channel = _persistentConnection.CreateModel();

            channel.ExchangeDeclare(exchange: BROKER_NAME,
                                    type: "direct");

            channel.QueueDeclare(queue: _queueName,
                                 durable: true,
                                 exclusive: false,
                                 autoDelete: false,
                                 arguments: new Dictionary <string, object> {
                { "x-queue-mode", "lazy" }
            });

            var consumer = new EventingBasicConsumer(channel);

            consumer.Received += async(model, ea) =>
            {
                var eventName = ea.RoutingKey;
                var message   = Encoding.UTF8.GetString(ea.Body);

                await _subsManager.ProcessEvent(eventName, message);

                channel.BasicAck(ea.DeliveryTag, multiple: false);
            };

            channel.BasicConsume(queue: _queueName,
                                 autoAck: false,
                                 consumer: consumer);

            channel.CallbackException += (sender, ea) =>
            {
                _consumerChannel.Dispose();
                _consumerChannel = CreateConsumerChannel();
            };
            channel.BasicQos(0, 1, false);

            return(channel);
        }
Esempio n. 2
0
        private IModel CreateConsumerChannel(string exchangeName)
        {
            if (!_persistentConnection.IsConnected)
            {
                _persistentConnection.TryConnect();
            }

            var channel = _persistentConnection.CreateModel();

            channel.ExchangeDeclare(exchange: exchangeName,
                                    type: "direct");

            _queueName = channel.QueueDeclare(QueueName).QueueName;

            var consumer = new EventingBasicConsumer(channel);

            consumer.Received += async(model, ea) =>
            {
                var eventName = ea.RoutingKey;
                var message   = Encoding.UTF8.GetString(ea.Body);

                await _subsManager.ProcessEvent(eventName, message);
            };

            channel.BasicConsume(queue: _queueName,
                                 autoAck: false,
                                 consumer: consumer);

            channel.CallbackException += (sender, ea) =>
            {
                _consumerChannel.Dispose();
                _consumerChannel = CreateConsumerChannel(exchangeName);
            };

            return(channel);
        }
Esempio n. 3
0
        public override void Publish(IntegrationEvent @event)
        {
            var eventName = _subsManager.GetEventKey(@event);

            _subsManager.ProcessEvent(eventName, eventObject: @event);
        }