Пример #1
0
        public void Test()
        {
            var subMgr = SubscribeManagerFactory.CreateManager("redis");

            subMgr.AddSubscriber <TestSubject>(s =>
            {
                Console.WriteLine("1:--" + s.Key);
            });
            subMgr.AddSubscriber <TestSubject>(s =>
            {
                Console.WriteLine("2:--" + s.Key);
            });

            subMgr.Publish(new TestSubject {
                Key = "fireasy1"
            });
            subMgr.Publish(new TestSubject {
                Key = "fireasy2"
            });

            subMgr.RemoveSubscriber <TestSubject>();

            subMgr.Publish(new TestSubject {
                Key = "new fireasy1"
            });
            subMgr.Publish(new TestSubject {
                Key = "new fireasy2"
            });

            Thread.Sleep(2000);
        }
Пример #2
0
        public void Test()
        {
            var subMgr   = SubscribeManagerFactory.CreateManager("redis");
            var cacheMgr = CacheManagerFactory.CreateManager("redis");

            subMgr.AddSubscriber <TestSubject>("a", s =>
            {
                Console.WriteLine("1:--" + s.Key);
            });
            subMgr.AddSubscriber <TestSubject>(s =>
            {
                //throw new Exception();
                Console.WriteLine("2:--" + s.Key);
            });

            subMgr.Publish(new TestSubject {
                Key = "fireasy1"
            });
            subMgr.Publish(new TestSubject {
                Key = "fireasy2"
            });

            //subMgr.RemoveSubscriber<TestSubject>();

            subMgr.Publish("a", new TestSubject {
                Key = "new fireasy1"
            });
            subMgr.Publish(new TestSubject {
                Key = "new fireasy2"
            });

            Thread.Sleep(5000);
        }
Пример #3
0
        public void Test()
        {
            var subMgr = SubscribeManagerFactory.CreateManager("redis");

            subMgr.AddSubscriber <TestSubject>(s =>
            {
                Console.WriteLine("1:" + s.Key);
            });
            subMgr.AddSubscriber <TestSubject>(s =>
            {
                Console.WriteLine("2:" + s.Key);
            });
            subMgr.AddSubscriber(typeof(TestSubject).FullName, (s) =>
            {
                Console.WriteLine(Encoding.UTF8.GetString(s));
            });

            subMgr.Publish(new TestSubject {
                Key = "fireasy1"
            });
            subMgr.Publish(new TestSubject {
                Key = "fireasy2"
            });

            subMgr.RemoveSubscriber <TestSubject>();

            subMgr.Publish(new TestSubject {
                Key = "fireasy1"
            });
            subMgr.Publish(new TestSubject {
                Key = "fireasy2"
            });

            Thread.Sleep(2000);
        }
Пример #4
0
        public void Test()
        {
            var subMgr = SubscribeManagerFactory.CreateManager("aliyun");

            subMgr.Publish(new TestSubject {
                Key = "dfasfa"
            });
        }
Пример #5
0
        public Task SendAsync(InvokeMessage message)
        {
            var sub = SubscribeManagerFactory.CreateManager();

            sub.Publish(new Subject {
                Source = context.ConnectionId, Message = message
            });
            return(null);
        }
Пример #6
0
        public void TestSubscriber()
        {
            var subMgr = SubscribeManagerFactory.CreateManager("redis");

            subMgr.Discovery <TestSubject>(this.GetType().Assembly);
            subMgr.AddSubscriber <TestSubject>(new SubjectSubscriber1());
            subMgr.Publish(new TestSubject {
                Key = "fireasy1"
            });

            Thread.Sleep(2000);
        }
Пример #7
0
        public Task LisitenAsync()
        {
            var sub = SubscribeManagerFactory.CreateManager();

            sub.AddSubscriber <Subject>(subject =>
            {
                if (subject.Target == context.ConnectionId)
                {
                }
            });

            return(null);
        }
Пример #8
0
        public void TestAsync()
        {
            var subMgr = SubscribeManagerFactory.CreateManager("rabbit");
            var r      = new Random();

            subMgr.AddAsyncSubscriber <TestSubject>(async s =>
            {
                //throw new Exception();
                Thread.Sleep(r.Next(0, 500));
                Console.WriteLine("1:" + s.Key);
                if (r.Next(10) < 5)
                {
                    //throw new Exception();
                }
                await Task.Run(() => { });
            });
            subMgr.AddAsyncSubscriber <TestSubject>("a", async s =>
            {
                Thread.Sleep(r.Next(0, 500));
                Console.WriteLine("2:" + s.Key);
                await Task.Run(() => { });
            });

            subMgr.Publish(new TestSubject {
                Key = "fireasy1"
            });
            subMgr.Publish(new TestSubject {
                Key = "fireasy2"
            });
            subMgr.Publish(new TestSubject {
                Key = "fireasy3"
            });
            subMgr.Publish(new TestSubject {
                Key = "fireasy4"
            });
            subMgr.Publish(new TestSubject {
                Key = "fireasy5"
            });
            subMgr.Publish(new TestSubject {
                Key = "fireasy6"
            });
            subMgr.Publish("a", new TestSubject {
                Key = "fireasy7"
            });
            subMgr.Publish("a", new TestSubject {
                Key = "fireasy8"
            });

            Thread.Sleep(10000);
        }
Пример #9
0
        /// <summary>
        /// 发送消息。
        /// </summary>
        /// <param name="method"></param>
        /// <param name="arguments"></param>
        /// <returns></returns>
        public override async Task SendAsync(string method, params object[] arguments)
        {
            //使用消息队列将消息发指定的服务器,即aliveKey对应的服务器
            var subMgr = SubscribeManagerFactory.CreateManager();
            var msg    = new DistributedInvokeMessage
            {
                AliveKey    = aliveKey,
                Connections = connections,
                Message     = new InvokeMessage(method, 0, arguments)
            };

            var bytes = Encoding.UTF8.GetBytes(new JsonSerializer().Serialize(msg));
            await subMgr.PublishAsync(aliveKey, bytes);
        }
        internal static void Bind(IServiceCollection services, IConfiguration configuration)
        {
            ConfigurationUnity.Bind <LoggingConfigurationSection>(configuration);
            ConfigurationUnity.Bind <CachingConfigurationSection>(configuration);
            ConfigurationUnity.Bind <ContainerConfigurationSection>(configuration);
            ConfigurationUnity.Bind <SubscribeConfigurationSection>(configuration);

            if (services != null)
            {
                services.AddSingleton(typeof(ILogger), s => LoggerFactory.CreateLogger());
                services.AddSingleton(typeof(ICacheManager), s => CacheManagerFactory.CreateManager());
                services.AddSingleton(typeof(ISubscribeManager), s => SubscribeManagerFactory.CreateManager());
                services.AddSingleton(typeof(ITextSerializer), s => SerializerFactory.CreateSerializer());
            }
        }
Пример #11
0
        /// <summary>
        /// 初始化 <see cref="DistributedClientManager"/> 类的新实例。
        /// </summary>
        /// <param name="option"></param>
        public DistributedClientManager(WebSocketBuildOption option)
            : base(option)
        {
            aliveKey = option.AliveKey;

            //开启消息订阅,使用aliveKey作为通道
            var subMgr = SubscribeManagerFactory.CreateManager();

            subMgr.AddSubscriber(aliveKey, bytes =>
            {
                //收到消息后,在本地查找连接,并发送消息
                var msg = new JsonSerializer().Deserialize <DistributedInvokeMessage>(Encoding.UTF8.GetString(bytes));
                Clients(msg.Connections.ToArray()).SendAsync(msg.Message.Method, msg.Message.Arguments);
            });
        }
Пример #12
0
        public void Test()
        {
            var subMgr = SubscribeManagerFactory.CreateManager("amqp");
            var r      = new Random();

            subMgr.AddSubscriber <TestSubject>(s =>
            {
                //throw new Exception();
                Thread.Sleep(r.Next(0, 500));
                Console.WriteLine("1:" + s.Key);
                if (r.Next(10) < 5)
                {
                    //throw new Exception();
                }
            });
            subMgr.AddSubscriber <TestSubject>("a", s =>
            {
                Thread.Sleep(r.Next(0, 500));
                Console.WriteLine("2:" + s.Key);
            });

            subMgr.Publish(new TestSubject {
                Key = "fireasy1"
            });
            subMgr.Publish(new TestSubject {
                Key = "fireasy2"
            });
            subMgr.Publish(new TestSubject {
                Key = "fireasy3"
            });
            subMgr.Publish(new TestSubject {
                Key = "fireasy4"
            });
            subMgr.Publish(new TestSubject {
                Key = "fireasy5"
            });
            subMgr.Publish(new TestSubject {
                Key = "fireasy6"
            });
            subMgr.Publish("a", new TestSubject {
                Key = "fireasy7"
            });
            subMgr.Publish("a", new TestSubject {
                Key = "fireasy8"
            });

            Thread.Sleep(5000);
        }
Пример #13
0
        /// <summary>
        /// 发送消息。
        /// </summary>
        /// <param name="method"></param>
        /// <param name="arguments"></param>
        /// <returns></returns>
        public override Task SendAsync(string method, params object[] arguments)
        {
            //使用消息队列将消息发指定的服务器,即aliveKey对应的服务器
            var subMgr = SubscribeManagerFactory.CreateManager();
            var msg    = new DistributedInvokeMessage
            {
                AliveKey    = aliveKey,
                Connections = connections,
                Message     = new InvokeMessage(method, 0, arguments)
            };

            var bytes = Encoding.UTF8.GetBytes(new JsonSerializer().Serialize(msg));

            subMgr.Publish(aliveKey, bytes);

#if NETSTANDARD
            return(Task.CompletedTask);
#else
            return(new Task(null));
#endif
        }
Пример #14
0
        public async Task TestTryGet()
        {
            var subMgr = SubscribeManagerFactory.CreateManager("redis");

            Parallel.For(0, 4, i =>
            {
                var locker = LockerFactory.CreateLocker();
                locker.Lock("dfafafaf", TimeSpan.FromSeconds(10), () =>
                {
                    Thread.Sleep(1000);
                    Console.WriteLine(i + " " + DateTime.Now);
                });
            });

            var cacheMgr = CacheManagerFactory.CreateManager("redis");

            cacheMgr = CacheManagerFactory.CreateManager("redis");
            var value = await cacheMgr.TryGetAsync("test1", () => 100);

            Assert.AreEqual(100, value);
        }
Пример #15
0
 /// <summary>
 /// 注册消息订阅器。
 /// </summary>
 /// <param name="name">配置实例名称。</param>
 /// <param name="subscriber">消息订阅器。</param>
 public void Add <TSubject>(Action <TSubject> subscriber) where TSubject : class
 {
     SubscribeManagerFactory.CreateManager(name)?.AddSubscriber(subscriber);
 }