/// <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); }
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); }
public Message Receive(ReceiveMessageRequest request) { if (request == null) { return(null); } request.MaxNumberOfMessages = 1; var response = SqsClient.ReceiveMessage(request); return(response?.Messages.SingleOrDefault()); }
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)); }
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)); }