/// <summary> /// Reads message(s) from a queue. Returns JSON structure with message contents. Message data is byte[] encoded to base64 string. /// </summary> /// <param name="inputParams"></param> /// <returns>JSON structure with message contents: string Data, Dictionary(string,string) Headers, ulong DeliveryTag, uint MessageCount</returns> public static Output ReadMessage([PropertyTab] ReadInputParams inputParams) { var output = new Output(); OpenConnectionIfClosed(inputParams.HostName, inputParams.ConnectWithURI); while (inputParams.ReadMessageCount-- > 0) { var rcvMessage = _channel.BasicGet(queue: inputParams.QueueName, autoAck: inputParams.AutoAck == ReadAckType.AutoAck); if (rcvMessage != null) { output.Messages.Add(new Message { Data = Convert.ToBase64String(rcvMessage.Body.ToArray()), Headers = GetResponseHeaderDictionary(rcvMessage.BasicProperties), MessagesCount = rcvMessage.MessageCount, DeliveryTag = rcvMessage.DeliveryTag }); } // Break the loop if no more messagages are present. else { break; } } // Auto acking. if (inputParams.AutoAck != ReadAckType.AutoAck && inputParams.AutoAck != ReadAckType.ManualAck) { var ackType = ManualAckType.NackAndRequeue; switch (inputParams.AutoAck) { case ReadAckType.AutoNack: ackType = ManualAckType.Nack; break; case ReadAckType.AutoNackAndRequeue: ackType = ManualAckType.NackAndRequeue; break; case ReadAckType.AutoReject: ackType = ManualAckType.Reject; break; case ReadAckType.AutoRejectAndRequeue: ackType = ManualAckType.RejectAndRequeue; break; } foreach (var message in output.Messages) { AcknowledgeMessage(ackType, message.DeliveryTag); } } return(output); }
/// <summary> /// Reads message(s) from a queue. Returns JSON structure with message contents. Message data is string converted from byte[] using UTF8 encoding /// </summary> /// <param name="inputParams"></param> /// <returns>JSON structure with message contents</returns> public static OutputString ReadMessageString([PropertyTab] ReadInputParams inputParams) { var messages = ReadMessage(inputParams); OutputString outString = new OutputString(); outString.Messages = messages.Messages.Select(m => new MessageString { DeliveryTag = m.DeliveryTag, MessagesCount = m.MessagesCount, Data = Encoding.UTF8.GetString(Convert.FromBase64String(m.Data)) }).ToList(); return(outString); }
/// <summary> /// Reads message(s) from a queue. Returns JSON structure with message contents. Message data is byte[] encoded to base64 string /// </summary> /// <param name="inputParams"></param> /// <returns>JSON structure with message contents</returns> public static Output ReadMessage([PropertyTab] ReadInputParams inputParams) { Output output = new Output(); OpenConnectionIfClosed(inputParams.HostName, inputParams.ConnectWithURI); //channel.QueueDeclare(queue: inputParams.QueueName, // durable: false, // exclusive: false, // autoDelete: false, // arguments: null); while (inputParams.ReadMessageCount-- > 0) { var rcvMessage = _channel.BasicGet(queue: inputParams.QueueName, autoAck: inputParams.AutoAck == ReadAckType.AutoAck); if (rcvMessage != null) { output.Messages.Add(new Message { Data = Convert.ToBase64String(rcvMessage.Body), MessagesCount = rcvMessage.MessageCount, DeliveryTag = rcvMessage.DeliveryTag }); } //break the loop if no more messagages are present else { break; } } // Auto acking if (inputParams.AutoAck != ReadAckType.AutoAck && inputParams.AutoAck != ReadAckType.ManualAck) { ManualAckType ackType = ManualAckType.NackAndRequeue; switch (inputParams.AutoAck) { case ReadAckType.AutoNack: ackType = ManualAckType.Nack; break; case ReadAckType.AutoNackAndRequeue: ackType = ManualAckType.NackAndRequeue; break; case ReadAckType.AutoReject: ackType = ManualAckType.Reject; break; case ReadAckType.AutoRejectAndRequeue: ackType = ManualAckType.RejectAndRequeue; break; } foreach (var message in output.Messages) { AcknowledgeMessage(ackType, message.DeliveryTag); } } return(output); }