public object BasicConsume(out RQChannel rabbitMqChannel, out long messageCount, bool ack, out string messageId) { messageId = string.Empty; object messageItem = null; messageCount = 0; Connection = RQConnection.GetConnection(); rabbitMqChannel = new RQChannel(Connection); BasicGetResult eventArgs; eventArgs = rabbitMqChannel.Channel.BasicGet(QueueName, !ack); if (eventArgs != null) { byte[] message = eventArgs.Body; var binaryFormatter = new BinaryFormatter(); var memoryStream = new MemoryStream(); memoryStream.Write(message, 0, message.Length); memoryStream.Seek(0, SeekOrigin.Begin); messageItem = binaryFormatter.Deserialize(memoryStream); messageId = eventArgs.DeliveryTag.ToString(CultureInfo.InvariantCulture); //Id must not be changed or lost in any case messageCount = eventArgs.MessageCount; } if (eventArgs == null || !ack) { rabbitMqChannel.Dispose(); rabbitMqChannel = null; } return messageItem; }
public MessageItem Consume(out RQChannel rabbitMqChannel, out long messageCount, bool ack) { MessageItem messageItem = null; messageCount = 0; Connection = RQConnection.GetConnection(); rabbitMqChannel = new RQChannel(Connection); // QueueingBasicConsumer Consumer = new QueueingBasicConsumer(rabbitMqChannel.Channel); //rabbitMqChannel.Channel.BasicConsume(QueueName, false, Consumer); //BasicDeliverEventArgs eventArgs; //Consumer.Queue.Dequeue(5000, out eventArgs); //Timeout is essential BasicGetResult eventArgs; eventArgs = rabbitMqChannel.Channel.BasicGet(QueueName, !ack); //Channel.BasicGet(string queue,bool noAck) if (eventArgs != null) { String jsonified = Encoding.UTF8.GetString(eventArgs.Body); var settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.Objects, }; messageItem = JsonConvert.DeserializeObject<MessageItem>(jsonified, settings); messageItem.MessageId = eventArgs.DeliveryTag.ToString(CultureInfo.InvariantCulture); //Id must not be changed or lost in any case messageCount = eventArgs.MessageCount; } if (eventArgs == null || !ack) { rabbitMqChannel.Dispose(); rabbitMqChannel = null; } return messageItem; }
public bool RequeueMessageItem(RQChannel rabbitMqChannel, string messageIdentifier) { rabbitMqChannel.Channel.BasicReject(Convert.ToUInt32(messageIdentifier), true); rabbitMqChannel.Dispose(); return true; }
public bool DeleteMessageItem(RQChannel rabbitMqChannel, string messageIdentifier) { rabbitMqChannel.Channel.BasicAck(Convert.ToUInt32(messageIdentifier), false); rabbitMqChannel.Dispose(); return true; }