public int GetNotifications() { int count = 0; // Check Queue For Shutdown Message var request = new Amazon.SQS.Model.ReceiveMessageRequest(); request.WithQueueUrl(AppUtility.GetContext().ShutdownNotificationQueue); var rsp = queue.ReceiveMessage(request); if (rsp.IsSetReceiveMessageResult()) { foreach (var msg in rsp.ReceiveMessageResult.Message) { if (msg.IsSetMessageId()) { Debug.WriteLine("Notification Instance shutdown: " + msg.Body); var delMsg = new Amazon.SQS.Model.DeleteMessageRequest(); delMsg.WithQueueUrl(AppUtility.GetContext().ShutdownQueue); delMsg.WithReceiptHandle(msg.ReceiptHandle); var delRsp = queue.DeleteMessage(delMsg); count += 1; } } } return(count); }
public RPCEnvelope[] Listen() { Setup(); var rsp = queue.ReceiveMessage(new Amazon.SQS.Model.ReceiveMessageRequest() .WithWaitTimeSeconds(20) .WithMaxNumberOfMessages(10) .WithQueueUrl(requestQueueUrl)); if (!rsp.IsSetReceiveMessageResult()) { Debug.WriteLine("No Messages Available"); return(null); } if (!rsp.ReceiveMessageResult.IsSetMessage()) { Debug.WriteLine("Message not set"); return(null); } List <RPCEnvelope> envList = new List <RPCEnvelope>(); RPCEnvelope env = null; var deleteList = new List <Amazon.SQS.Model.DeleteMessageBatchRequestEntry> { }; foreach (var msg in rsp.ReceiveMessageResult.Message) { // NOTE: These are SNS Messages so need to parse that envelope off // Type,MessageId,TopicArn,Subject,Message,Timestamp,SignatureVersion,Signature, // SigningCertURL,UnsubscribeURL // Debug.WriteLine("Message: " + msg.Body); JToken token = JObject.Parse(msg.Body); JToken jmsg = token.SelectToken("Message"); JToken subject = token.SelectToken("Subject"); if (msg.IsSetReceiptHandle()) { deleteList.Add(new Amazon.SQS.Model.DeleteMessageBatchRequestEntry() .WithReceiptHandle(msg.ReceiptHandle) .WithId(Guid.NewGuid().ToString())); } Dictionary <string, Object> d; try { //env = serializer.Deserialize<RPCEnvelope>(reader); env = JsonConvert.DeserializeObject <RPCEnvelope>(jmsg.ToString()); d = JsonConvert.DeserializeObject <Dictionary <string, Object> >(jmsg.ToString()); } catch (Exception ex) { Debug.WriteLine(String.Format("Ignore exception deserializing: {0}", ex), GetType().Name); continue; } var responseQueueUrl = env.ResponseQueueUrl; var operation = env.Operation; var serializer = new Newtonsoft.Json.JsonSerializer(); Newtonsoft.Json.JsonReader reader = jmsg.CreateReader(); var content = d["Message"].ToString(); if (operation == "Register") { Debug.WriteLine("Found: " + operation); //env.Message = serializer.Deserialize<Register>(reader); env.Message = JsonConvert.DeserializeObject <Register>(content); } else { Debug.WriteLine("Ignore: " + operation); continue; } envList.Add(env); } var entries = deleteList.ToArray <Amazon.SQS.Model.DeleteMessageBatchRequestEntry>(); // Delete Messages var deleteResponse = queue.DeleteMessageBatch(new Amazon.SQS.Model.DeleteMessageBatchRequest() .WithQueueUrl(requestQueueUrl) .WithEntries(entries)); return(envList.ToArray <RPCEnvelope>()); }
private TaskQueueData GetTask(Priority oPriority) { string strUrlQueue = GetQueueUrl(oPriority); TaskQueueData oData = null; try { using (Amazon.SQS.AmazonSQS oSQSClient = Amazon.AWSClientFactory.CreateAmazonSQSClient()) { Amazon.SQS.Model.ReceiveMessageRequest oReceiveMessageRequest = new Amazon.SQS.Model.ReceiveMessageRequest(); oReceiveMessageRequest.QueueUrl = strUrlQueue; oReceiveMessageRequest.MaxNumberOfMessages = 1; Amazon.SQS.Model.ReceiveMessageResponse oReceiveMessageResponse = oSQSClient.ReceiveMessage(oReceiveMessageRequest); if (oReceiveMessageResponse.IsSetReceiveMessageResult()) { Amazon.SQS.Model.ReceiveMessageResult oReceiveMessageResult = oReceiveMessageResponse.ReceiveMessageResult; foreach (Amazon.SQS.Model.Message oMessage in oReceiveMessageResult.Message) { oData = TaskQueueData.DeserializeFromXml(oMessage.Body); SQSDataKey oSQSDataKey = new SQSDataKey(); oSQSDataKey.m_oPriority = oPriority; oSQSDataKey.m_strReceiptHandle = oMessage.ReceiptHandle; oData.m_oDataKey = oSQSDataKey; break; } } } } catch (Amazon.SQS.AmazonSQSException) { } catch { } return(oData); }