How many subscribe are allowed in StackExchange.Redis.ISubscriber.Subscribe

Viewed 89

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?

  1. Incase of too many subscrption this program terminate abruptly without any exception?
  2. does StackExchange.Redis.ISubscriber.Subscribe any limitation for subscription?
  3. 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();
    }
}
0 Answers
Related