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); }
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); }
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); }
public void Test() { var subMgr = SubscribeManagerFactory.CreateManager("aliyun"); subMgr.Publish(new TestSubject { Key = "dfasfa" }); }
public Task SendAsync(InvokeMessage message) { var sub = SubscribeManagerFactory.CreateManager(); sub.Publish(new Subject { Source = context.ConnectionId, Message = message }); return(null); }
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); }
public Task LisitenAsync() { var sub = SubscribeManagerFactory.CreateManager(); sub.AddSubscriber <Subject>(subject => { if (subject.Target == context.ConnectionId) { } }); return(null); }
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); }
/// <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()); } }
/// <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); }); }
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); }
/// <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 }
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); }
/// <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); }