gpt4 book ai didi

azure - 一个客户端多次接收消息且一个客户端接收后消息被删除

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

我有两个客户端正在监听主题的订阅。我发现以下问题。

问题 1:

如果一个客户端收到一条消息并将其标记为完成,其他客户端将不会收到该消息。

但我希望所有客户都能收到该消息并确认它,以便客户一旦收到该消息就不会再收到

问题 2:

如果我不确认消息已完成。有时我会多次收到该消息。

问题 3:

在消息接收期间,如果看到网络断开连接。一段时间后它重新连接,我收到了重新开始的消息。

用于发送消息代码

============

if (!namespaceManager.TopicExists("DataCollectionTopic"))
namespaceManager.CreateTopic("DataCollectionTopic");
if (!namespaceManager.SubscriptionExists("DataCollectionTopic", "one"))
namespaceManager.CreateSubscription("DataCollectionTopic", "one");
for(int i=0;i<100;i++)
{
BrokeredMessage bm = new BrokeredMessage("new Topic one");
bm.Label = "hELLLOOOO xcvxvxcvxvxvxc DummyMEssage"+i;
bm.Properties["StoreName"] = "asdasdasqwedas";
bm.Properties["MachineID"] = "Bajjiiiqweq567567wii";

if (namespaceManager == null)
{
Console.WriteLine("\nUnexpected Error");
return;
}
MessageSender sender = messageFactory.CreateMessageSender("DataCollectionTopic");
sender.Send(bm);

for receiving the message

===================


MessageReceiver receiver = await messageFactory.CreateMessageReceiverAsync("DataCollectionTopic/subscriptions/Vijay");

while (true) {

BrokeredMessage receivedMessage = receiver.Receive();

try
{
ProcessMessage(receivedMessage);
// receivedMessage.Complete();
}

catch (Exception e)
{
// receivedMessage.Abandon();
}
}
}

===============

TIA

最佳答案

问题 1

如果两个客户端使用相同的订阅名称进行接收,则它们将充当竞争消费者。第一个收到消息并将其标记为已完成(已处理)的消费者将是获胜者。其余客户端不会处理相同的消息。如果打算接收所有客户端的消息(事件),则每个客户端都应该有自己的订阅,并且消息的副本将传递到每个订阅。

问题 2

这是预期的行为。您收到的消息最多为 MaxDeliverCount之后该消息将被 DLQ 处理。这是PeekLock 模式的默认行为。使用 ReceiveAndDelete 不会发生这种情况,但这是一种危险的模式,因为如果处理不成功,您将丢失消息。

问题 3

这是预期的行为。 PeekLock 模式下收到的每条消息都有一个 LockDuration ,给予处理代码完成消息或放弃消息的时间。如果未完成,消息将对其他竞争消费者可见,并将被重新处理最多 DeliveryCount 次。

总结一下

  1. 每个客户端有多个订阅,以便所有客户端接收相同的消息(事件)
  2. 如果处理成功,则完成消息。如需延长时间,renew the lock .

关于azure - 一个客户端多次接收消息且一个客户端接收后消息被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39873998/

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