Есть ли способ создать слушатель в C #, который принимает 10 сообщений из очереди Amazon SQS и хранит в базе данных на моем конце? - PullRequest
0 голосов
/ 10 мая 2018

На данный момент я написал следующие строки кода, и по ним я получаю только первое сообщение, присутствующее в очереди

 string message = string.Empty;
        ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest();           
        receiveMessageRequest.QueueUrl = "The URL of my queue";
        receiveMessageRequest.MaxNumberOfMessages = 10;
        ContactsDTO DTOobj = new ContactsDTO();
        ReceiveMessageResponse receiveMessageResponse = objClient.ReceiveMessage(receiveMessageRequest);

        List<Message> messagesList = new List<Message>();
        messagesList = receiveMessageResponse.Messages;

        foreach (Message objMessage in messagesList)
        {
            message += objMessage.Body;
            receiptHandle = objMessage.ReceiptHandle;
        }
        Session["MessageReceiptHandle"] = receiptHandle;
        var s = new JavaScriptSerializer();
        ContactsDTO obj = s.Deserialize<ContactsDTO>(message);

Мой класс ContactsDTO: -

 public class ContactsDTO
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }

}

1 Ответ

0 голосов
/ 15 мая 2018

Aws имеет распределенные серверы и сообщения также распределяются по разным серверам. Вот почему вы не получаете все сообщения за один вызов, поскольку частично сообщения хранятся на разных серверах.

Что вы можете сделать здесь, это поместить цикл while 1, который непрерывно извлекает сообщение из очереди и сохраняет его в БД.

И запустите этот скрипт как процесс nohup, чтобы он не перестал работать. Таким образом, всякий раз, когда производители отправляют какое-либо сообщение в очередь, оно напрямую выбирается потребителем nohup.

...