コード例 #1
0
        /// <summary>
        /// Gets a message from an SQS queue and if successful, deletes the message from the queue.
        /// Safe method for multiple concurrent consumers of a single SQS because the initial message read makes the message unavailable to other callers.
        /// </summary>
        /// <param name="QueueUrl">The SQS queue URL</param>
        /// <param name="bForceNoDelete">Debug option. Skips the message delete when testing reading messages from a live queue</param>
        /// <returns>A dequeued SQS message or null if it fails.</returns>
        public Message SQSDequeueMessage(string QueueUrl, bool bForceNoDelete)
        {
            if (!IsSQSValid)
            {
                return(null);
            }

            ReceiveMessageRequest ReceiveRequest = new ReceiveMessageRequest
            {
                QueueUrl            = QueueUrl,
                MaxNumberOfMessages = 1
            };

            ReceiveMessageResponse ReceiveResponse = SqsClient.ReceiveMessage(ReceiveRequest);

            if (ReceiveResponse.Messages.Count == 1)
            {
                Message Message = ReceiveResponse.Messages[0];

                if (Message != null && (bForceNoDelete || DeleteRecordSQS(QueueUrl, Message)))
                {
                    return(Message);
                }
            }

            return(null);
        }
コード例 #2
0
        private bool DequeueRecordSQS(out string OutRecordString)
        {
            OutRecordString = string.Empty;

            try
            {
                var ReceiveRequest = new ReceiveMessageRequest
                {
                    QueueUrl            = Config.Default.AWSSQSQueueUrl,
                    MaxNumberOfMessages = 1
                };

                var ReceiveResponse = SqsClient.ReceiveMessage(ReceiveRequest);

                if (ReceiveResponse.Messages.Count == 1)
                {
                    var Message = ReceiveResponse.Messages[0];

                    if (Message != null && TryDeleteRecordSQS(Message))
                    {
                        OutRecordString = Message.Body;
                        return(true);
                    }
                }
            }
            catch (Exception Ex)
            {
                CrashReporterProcessServicer.WriteException("DequeueRecordSQS: " + Ex.ToString());
            }
            return(false);
        }
コード例 #3
0
        public Message Receive(ReceiveMessageRequest request)
        {
            if (request == null)
            {
                return(null);
            }

            request.MaxNumberOfMessages = 1;

            var response = SqsClient.ReceiveMessage(request);

            return(response?.Messages.SingleOrDefault());
        }
コード例 #4
0
        public IMessageContext <T> Receive(TimeSpan?timeout = null)
        {
            var receiveResponse = SqsClient.ReceiveMessage(new ReceiveMessageRequest {
                QueueUrl = QueueUrl
            });
            var message = receiveResponse.Messages.FirstOrDefault();

            if (message == null)
            {
                return(null);
            }

            return(new AwsSqsMessageContext <T>(this, Serializer.Deserialize(message.Body), message.ReceiptHandle));
        }
コード例 #5
0
        public Message Receive(ReceiveMessageRequest request)
        {
            if (request == null)
            {
                return(null);
            }

            if (receiveBuffer.Count > 0 && receiveBuffer.TryDequeue(out var toReturn))
            {
                return(toReturn);
            }

            request.MaxNumberOfMessages = Math.Min(SqsQueueDefinition.MaxBatchReceiveItems, Math.Max(request.MaxNumberOfMessages, 1));

            var response = SqsClient.ReceiveMessage(request);

            return(BufferResponse(response));
        }