zoukankan      html  css  js  c++  java
  • Redis之品鉴之旅(四)

    发布订阅,简单场景下的发布订阅完全可以使用。

    可以简单的理解,将一个公众号视为发布者,关注公众号的人视作订阅者,公众号发布一条文章或者消息,凡事订阅公众号的都可以收到消息。一个人可以订阅多个公众号,一个公众号可以被多个人订阅。

    //创建一个公众号--创建一个主题
    Console.WriteLine("发布服务");
    IRedisClientsManager redisClientManager = new PooledRedisClientManager("127.0.0.1:6379");
    string topicname = "Send_Log";
    RedisPubSubServer pubSubServer = new RedisPubSubServer(redisClientManager, topicname)
    {
    	OnMessage = (channel, msg) =>
    	{
    		Console.WriteLine($"从频道:{channel}上接受到消息:{msg},时间:{DateTime.Now.ToString("yyyyMMdd HH:mm:ss")}");
    		Console.WriteLine("___________________________________________________________________");
    	},
    	OnStart = () =>
    	{
    		Console.WriteLine("发布服务已启动");
    		Console.WriteLine("___________________________________________________________________");
    	},
    	OnStop = () => { Console.WriteLine("发布服务停止"); },
    	OnUnSubscribe = channel => { Console.WriteLine(channel); },
    	OnError = e => { Console.WriteLine(e.Message); },
    	OnFailover = s => { Console.WriteLine(s); },
    };
    //接收消息
    pubSubServer.Start();
    while (1==1)
    {
    	Console.WriteLine("请输入记录的日志");
    	string message = Console.ReadLine();
    	redisClientManager.GetClient().PublishMessage(topicname, message);
    }
    
    

    订阅方:

    using (RedisClient consumer = new RedisClient("127.0.0.1", 6379, "12345", 10))
    {
    
    	Console.WriteLine($"创建订阅异常信息数据库记录");
    	var subscription = consumer.CreateSubscription();
    	//接受到消息时
    	subscription.OnMessage = (channel, msg) =>
    	{
    		if (msg != "CTRL:PULSE")
    		{
    			Console.WriteLine($"从频道:{channel}上接受到消息:{msg},时间:{DateTime.Now.ToString("yyyyMMdd HH:mm:sss")}");
    			Logger.WriteLogByDB(msg);
    			Console.WriteLine("_________________________________记录成功__________________________________");
    		}
    	};
    	  
    	//订阅频道时  Mylist 利用数组
    	subscription.OnSubscribe = (channel) =>
    	{
    		Console.WriteLine("订阅客户端:开始订阅" + channel);
    	};
    	//取消订阅频道时
    	subscription.OnUnSubscribe = (a) => { Console.WriteLine("订阅客户端:取消订阅"); };
    
    	//订阅频道
    	string topicname = "Send_Log";
    	subscription.SubscribeToChannels(topicname);
    }
    
    

    订阅方2:

    using (RedisClient consumer = new RedisClient("127.0.0.1", 6379, "12345", 10))
    {
    
    	Console.WriteLine($"创建订阅异常信息文本记录");
    	var subscription = consumer.CreateSubscription();
    	//接受到消息时
    	subscription.OnMessage = (channel, msg) =>
    	{
    		if (msg != "CTRL:PULSE")
    		{
    			Console.WriteLine($"从频道:{channel}上接受到消息:{msg},时间:{DateTime.Now.ToString("yyyyMMdd HH:mm:sss")}");
    			Logger.WriteTxtLogs("log", "异常", msg);
    			Console.WriteLine("_________________________________记录成功__________________________________");
    		}
    
    	};
    	//订阅频道时
    	subscription.OnSubscribe = (channel) =>
    	{
    		Console.WriteLine("订阅客户端:开始订阅" + channel);
    	};
    	//取消订阅频道时
    	subscription.OnUnSubscribe = (a) => { Console.WriteLine("订阅客户端:取消订阅"); };
    	//订阅频道
    	string topicname = "Send_Log";
    	subscription.SubscribeToChannels(topicname);
    }
    
    
  • 相关阅读:
    libuv::线程
    libuv::定时器
    libuv::线程池
    libuv::线程同步
    ABAQUS 2017 安装后无法运行问题
    Abaqus2017安装全过程
    ModelCenter安装详解
    centos下安装Ansys 17.2的全部过程
    Jmeter压力测试分布式部署
    Centos7永久挂载iso文件
  • 原文地址:https://www.cnblogs.com/vigorous/p/13554030.html
Copyright © 2011-2022 走看看