gpt4 book ai didi

azure - 接收前查看消息

转载 作者:行者123 更新时间:2023-12-03 03:15:00 24 4
gpt4 key购买 nike

我是 Azure 的新手,在过去的几周里学习了云和服务总线。

我正在尝试从 Azure 服务总线队列读取消息。 QueueClient 接收方法会将消息从队列中拉出,这是我最初不想做的。因此,我使用 Peek() 方法在 while 循环中一次浏览队列中的所有消息。然后我将消息的correlationId与我内部在本地数据库表中维护的CorrelationId进行比较。

只有当相关 ID 匹配时,我才会继续接收消息。但是,为了使用 messageSequencenumber 接收消息,我了解到我必须首先推迟消息,获取存储在列表或其他内容中的 messageid,然后使用 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.

最佳答案

我认为您应该重新考虑您的设计,因为这不是您通常使用排队系统的方式。当您需要时间解耦、负载平衡并且用于先进先出时使用它们。

您可能需要考虑使用 Servicebus 主题并为每个应用程序分配订阅者。主题与队列类似,但使用 Pub\Sub 模型。您可以使用主题\订阅中的过滤器将消息路由到正确的订阅。所有应用程序都会“发布”到一个主题,并且您将为每个应用程序拥有一个订阅。

关于azure - 接收前查看消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29546064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com