public IModel CreateConsumerChannel()
        {
            if (!_persistentConnection.IsConnected)
            {
                _persistentConnection.TryConnect();
            }

            var channel = _persistentConnection.CreateModel();

            channel.QueueDeclare(queue: _queueName, durable: true, exclusive: false, autoDelete: false, arguments: null);

            var consumer = new EventingBasicConsumer(channel);

            consumer.Received += async(model, ea) =>
            {
                var body    = ea.Body;
                var message = Encoding.UTF8.GetString(body);
                //Console.WriteLine($"Filename : {message} berhasil di save");
                BFIHelper.GetWorklist(message);
            };


            channel.BasicConsume(queue: _queueName, autoAck: true, consumer: consumer);
            channel.CallbackException += (sender, ea) =>
            {
                _consumerChannel.Dispose();
                _consumerChannel = CreateConsumerChannel();
            };
            return(channel);
        }
Пример #2
0
        public IModel CreateConsumerChannel()
        {
            if (!_persistentConnection.IsConnected)
            {
                _persistentConnection.TryConnect();
            }

            var channel = _persistentConnection.CreateModel();
            // channel.QueueDeclare(queue: _queueName, durable: true, exclusive: false, autoDelete: false, arguments: null);

            //var dict = new Dictionary<string, object>();
            //dict.Add("x-dead-letter-exchange", "x.guideline.wait");
            //dict.Add("x-dead-letter-routing-key", "q.guideline.booking");
            //channel.QueueDeclare(queue: _queueName, durable: true, exclusive: false, autoDelete: false, arguments: dict);

            var consumer = new EventingBasicConsumer(channel);

            consumer.Received += async(model, ea) =>
            {
                var body    = ea.Body;
                var message = Encoding.UTF8.GetString(body);
                //Console.WriteLine($"Filename : {message} berhasil di save");
                var temp   = BFIHelper.GetMessage(message);
                var status = temp.isSuccess;
                if (status)
                {
                    channel.BasicAck(ea.DeliveryTag, false);
                }
                else
                {
                    if (ea.BasicProperties.Headers.Count > 0)
                    {
                        IDictionary <string, object> customDict = new Dictionary <string, object>();
                        customDict = ea.BasicProperties.Headers;
                        var data = customDict.Where(x => x.Key.Equals("x-death")).FirstOrDefault();

                        var  count     = data.Value as List <System.Object>;
                        long realCount = 0;
                        foreach (var item in count)
                        {
                            var tempdata  = item as Dictionary <string, object>;
                            var tempdata2 = tempdata.Where(x => x.Key.Equals("count")).FirstOrDefault();
                            realCount = (long)tempdata2.Value;
                        }

                        if (realCount >= 2)
                        {
                            this.PublishMessage("x.guideline.dead", "q.guideline.booking", message);
                            channel.BasicAck(ea.DeliveryTag, false);
                            BFIHelper.GetDead(message);
                        }
                        else
                        {
                            channel.BasicReject(ea.DeliveryTag, false);
                        }
                    }
                    else
                    {
                        channel.BasicReject(ea.DeliveryTag, false);
                    }
                }
            };


            channel.BasicConsume(queue: _queueName, autoAck: false, consumer: consumer);
            channel.CallbackException += (sender, ea) =>
            {
                _consumerChannel.Dispose();
                _consumerChannel = CreateConsumerChannel();
            };
            return(channel);
        }