StackExchange.Redis.ISubscriber.Subscribe 中允许订阅多少

问题描述

当请求太多订阅时,ISubscriber.Subscribe 会突然终止,并且没有任何异常可以了解发生了什么或检查允许订阅多少?

  1. 如果订阅过多,这个程序会毫无例外地突然终止吗?
  2. StackExchange.Redis.ISubscriber.Subscribe 对订阅有任何限制吗?
  3. 有什么应该做和不应该做的事情

这是我的 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();
        }
    }

发布者代码

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),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();
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)