Я новичок в Azure и изучаю автобусы обслуживания и ремонта за последние пару недель.
Я пытаюсь прочитать сообщения из очереди служебной шины Azure. Метод получения QueueClient извлечет сообщение из очереди, чего я не хочу делать изначально. Поэтому я просматриваю все сообщения в очереди по одному в цикле while, используя метод Peek (). Затем я сравниваю идентификатор корреляции сообщения с идентификатором корреляции, который я внутренне поддерживаю в локальной таблице БД.
Только если идентификатор корреляции совпадает, я получаю сообщение. Но, чтобы получить сообщение с помощью messageSequencenumber, я узнал, что мне нужно сначала отложить сообщение, получить идентификатор сообщения, хранящийся в списке или что-то еще, а затем использовать метод QueueClient Receive () для получения сообщений и, наконец, пометить сообщение как полный.
Но поскольку я просматриваю сообщения с помощью Peek (), это не позволяет мне отложить сообщение. Я застрял здесь, получая сообщение с помощью messageId.
Также я не могу просто заполнить сообщение до получения.
Не могли бы вы предложить какие-нибудь способы добиться этого?
BrokeredMessage message = new BrokeredMessage();
message = null;
while ((message = reader.Peek()) != null && row_count > 0)
{
List<long> deferredMessageReceipts = new List<long>();
// Read Ping results table to get the rows with no msg_recv_ts
logobj.Categories.Clear();
logobj.Categories.Add("INFO");
logobj.Message = "Reading ! Message: " + " Correlation ID:" + message.CorrelationId;
Logger.Write(logobj);
if (message != null)
{
if (PRTA_rows.Corr_id == message.CorrelationId) //compare correlation ids
{
DateTime ping_recv_ts = DateTime.Now;
logobj.Categories.Clear();
logobj.Categories.Add("INFO");
string messageBody = message.GetBody<string>();
logobj.Message = "Ack Message Found ! Message Body: " + messageBody + " Correlation ID:" + message.CorrelationId;
Logger.Write(logobj);
string msg_type = "PING_ACK";
logobj.Categories.Clear();
logobj.Categories.Add("INFO");
logobj.Message = "Marking Message as complete...";
Logger.Write(logobj);
// Deferring a message
message.Defer(); // Getting error here "The operation cannot be completed because the ReceiveContext is null."
long msg_seq_nbr=message.SequenceNumber;
reader.Receive(msg_seq_nbr); // This operation is not possible without deferring the message.
message.Complete();
}
}
} // End while browsing messages.