コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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);
        }