ISubscriber.Subscribe terminate abruptly when too many subscription are requested and there are no exception or so to understand what was happening or to check on How many subscription are allowed?
- Incase of too many subscrption this program terminate abruptly without any exception?
- does StackExchange.Redis.ISubscriber.Subscribe any limitation for subscription?
- is there any do's & don'ts
here is my code for pub & sub
public class Subscriber
{
static Timer _timer = null;
static long batchNumber = 0;
static Subscriber subscriber;
public static void Main(string[] args)
{
try
{
_timer = new Timer(async (obj) => await StartIncrement(obj), null, 500, Timeout.Infinite);
subscriber = new Subscriber();
RedisWrapper.Instance.Ip = "127.0.0.1";
RedisWrapper.Instance.Port = 6379;
RedisWrapper.Instance.Init();
subscriber.StartSubscribe();
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
Console.ReadKey();
}
private static async Task StartIncrement(object obj)
{
batchNumber++;
subscriber.StartSubscribe();
_timer?.Change(500, Timeout.Infinite);
}
public void StartSubscribe()
{
try
{
Console.WriteLine($"Subscribing to chennal TESTPUBSUB{batchNumber}");
GetSubscriber().Subscribe("TESTPUBSUB" + batchNumber).OnMessage((msg) => OnDataReceive(msg)); ;
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
private void OnDataReceive(ChannelMessage msg)
{
var message = msg.Message;
Console.WriteLine(JsonConvert.DeserializeObject<JObject>(message)["batchnumber"]);
GetSubscriber().Unsubscribe("TESTPUBSUB" + JsonConvert.DeserializeObject<JObject>(message)["batchnumber"]);
}
private ISubscriber GetSubscriber()
{
return RedisWrapper.Instance.Connection.GetSubscriber();
}
}
Publisher code
public class Publisher
{
public static void Main(string[] args)
{
Publisher publisher = new Publisher();
RedisWrapper.Instance.Ip = "127.0.0.1";
RedisWrapper.Instance.Port = 6379;
RedisWrapper.Instance.Init();
publisher.StartPubliser();
Console.ReadKey();
}
Timer _timer;
public void StartPubliser()
{
_timer = new Timer(async (obj) => await StartPublish(obj), null, 550, Timeout.Infinite);
}
long batchNumber;
private async Task StartPublish(object obj)
{
batchNumber++;
try
{
GetSubscriber().Publish("TESTPUBSUB" + batchNumber, JsonConvert.SerializeObject(new { batchnumber = batchNumber, data = "Some message")}) );
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
Console.WriteLine($"Published Batch {batchNumber}");
_timer?.Change(550, Timeout.Infinite);
}
private ISubscriber GetSubscriber()
{
return RedisWrapper.Instance.Connection.GetSubscriber();
}
}