【发布时间】:2017-02-13 21:36:38
【问题描述】:
我有两个客户正在收听 topic 的订阅。我看到以下问题。
问题 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
【问题讨论】:
-
问题2。如果你没有标记为Complete...最终会有一个超时,这将允许它再次被拾取。
-
我没有提到任何超时。由于我有 n 个客户端,它们可能会在它们启动后随时启动,因此他们需要接收这些消息。但问题是如果我重新启动我的客户端,我会再次收到已经收到的消息。有时我会多次收到消息
-
“超时”是内置功能。我认为默认值为 30 秒。这得看情况。在此处查看“锁定持续时间”azure.microsoft.com/en-us/documentation/articles/…
-
您只需为每个接收者创建一个订阅,
标签: azure azureservicebus azure-service-fabric servicebus