Я просто задаю задержку перед тем, как подписчик прочитает следующий кадр, поэтому я ожидал, что это симулирует медленного подписчика и даст некоторые эффекты опции HighWatermark. Я ничего не наблюдаю, подписчик не пропускает ни сообщения, ни замедляет работу издателя. Я запустил 1 издателя и х подписчиков.
Я пытаюсь поиграть с примером pub-sub, взятым из документации https://netmq.readthedocs.io/en/latest/pub-sub/
Есть ли способ обнаружить, что подписчик работает медленно? Я имею в виду, что количество сообщений в очереди превысило значение HighWatermark. Стоит ли ожидать каких-либо исключений или событий в NetMqMonitor? Я также смотрю, есть ли возможность отключить такого медленного абонента.
using System;
using System.Threading;
using NetMQ;
using NetMQ.Sockets;
namespace Sub
{
class Program
{
static void Main()
{
Console.WriteLine("Subscriber started for Topic : {0}", topic);
using (var subSocket = new SubscriberSocket())
{
subSocket.Options.ReceiveHighWatermark = 100;
subSocket.Connect("tcp://localhost:12345");
subSocket.Subscribe("topic1");
Console.WriteLine("Subscriber socket connecting...");
while (true)
{
string messageTopicReceived = subSocket.ReceiveFrameString();
string messageReceived = subSocket.ReceiveFrameString();
Console.WriteLine($"{messageTopicReceived} {messageReceived}");
Thread.Sleep(50);
}
}
}
}
}
using System;
using System.Threading;
using NetMQ;
using NetMQ.Sockets;
namespace Pub
{
class Program
{
static void Main()
{
using (var pubSocket = new PublisherSocket())
{
Console.WriteLine("Publisher socket binding...");
pubSocket.Options.SendHighWatermark = 100;
pubSocket.Bind("tcp://*:12345");
Thread.Sleep(1000);
for (var i = 0; i < 100000; i++)
{
var msg = "msg-" + i;
Console.WriteLine("Sending message : {0}", msg);
pubSocket.SendMoreFrame("topic1").SendFrame(msg);
//Thread.Sleep(1);
}
}
}
}
}