Пример #1
0
        public void BasicEmit <T>(T message, IModel channel, IConnection connection)
        {
            var queueName  = typeof(T).ToQueue().CreateQueue(channel);
            var body       = message.ToMessage();
            var properties = RabbitMqHelper.GetBasicProperties(channel);

            if (connection.IsOpen)
            {
                channel.BasicPublish("", queueName, false, properties, body);
            }
        }
Пример #2
0
        public void AdvancedEmit <T>(Dictionary <string, object> args, T message, IModel channel, IConnection connection)
        {
            var exchange   = args.ConfigureExchange(channel);
            var routingKey = args.ConfigureRoutingKey();
            var body       = message.ToMessage();
            var properties = RabbitMqHelper.GetBasicProperties(channel);

            if (connection.IsOpen)
            {
                channel.BasicPublish(exchange: exchange, routingKey: routingKey, basicProperties: properties, body: body);
            }
        }
Пример #3
0
        public Tuple <string, Func <IModel, EventingBasicConsumer> > BasicConsume <T>(Action <T> action)
        {
            var queueName = typeof(T).ToQueue();
            Func <IModel, EventingBasicConsumer> consumer = (channel) =>
            {
                queueName.CreateQueue(channel);
                var basicConsumer = new EventingBasicConsumer(channel);
                RabbitMqHelper.InitQos(channel);
                basicConsumer.Received += (sender, args) => {
                    var body = args.Body.Convert <T>();
                    action(body);
                    channel.BasicAck(args.DeliveryTag, false);
                };
                return(basicConsumer);
            };

            return(new Tuple <string, Func <IModel, EventingBasicConsumer> >(queueName, consumer));
        }
Пример #4
0
        public Tuple <string, Func <IModel, EventingBasicConsumer> > AdvancedConsume <T>(Action <T> action, Dictionary <string, object> args)
        {
            var queueName = args.GetAdvancedQueueName(typeof(T));
            Func <IModel, EventingBasicConsumer> consumer = (channel) =>
            {
                queueName.CreateQueue(channel);
                var exchange   = args.ConfigureExchange(channel);
                var routingKey = args.ConfigureRoutingKey();
                RabbitMqHelper.BindQueue(queueName, exchange, routingKey, channel);
                var basicConsumer = new EventingBasicConsumer(channel);
                var prefetch      = args.GetPrefetch();
                RabbitMqHelper.InitQos(channel, prefetch);
                basicConsumer.Received += (sender, arguments) =>
                {
                    var body = arguments.Body.Convert <T>();
                    action(body);
                    channel.BasicAck(arguments.DeliveryTag, false);
                };
                return(basicConsumer);
            };

            return(new Tuple <string, Func <IModel, EventingBasicConsumer> >(queueName, consumer));
        }