/// <summary> /// Basic Qos /// </summary> /// <param name="channel"></param> /// <param name="model"></param> public void BasicQos(IModel channel, BasicQosModel model) { if (model == null) { return; } channel.BasicQos(prefetchSize: model.PrefetchSize, prefetchCount: model.PrefetchCount, global: model.Global); }
/// <summary> /// Basic Consume /// </summary> /// <param name="queue"></param> /// <param name="received"></param> /// <param name="consume"></param> /// <param name="qos"></param> /// <param name="queueDeclare"></param> /// <returns></returns> public string BasicConsume(string queue, Func <BasicDeliverEventArgsModel, bool> received, BasicConsumeModel consume = null, BasicQosModel qos = null, QueueDeclareModel queueDeclare = null) { string connectionKey = Guid.NewGuid().ToString(); var connection = factory.CreateConnection(); var channel = connection.CreateModel(); connections.Add(connectionKey, connection); QueueDeclare(channel, queueDeclare); BasicQos(channel, qos); Console.WriteLine("RabbitMQ: Waiting for messages."); var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, e) => { var res = received(new BasicDeliverEventArgsModel { Body = e.Body, ConsumerTag = e.ConsumerTag, DeliveryTag = e.DeliveryTag, Exchange = e.Exchange, Redelivered = e.Redelivered, RoutingKey = e.RoutingKey, }); if (!res) { return; } channel.BasicAck(deliveryTag: e.DeliveryTag, multiple: qos?.PrefetchCount > 1); }; if (consume == null) { consume = new BasicConsumeModel(); } channel.BasicConsume(queue, consume.AutoAck, consume.ConsumerTag, consume.NoLocal, consume.Exclusive, consume.Arguments, consumer); return(connectionKey); }