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);
    }
    
    
  • 相关阅读:
    排序之插入排序
    swfupload在chrome中点击上传图片按钮无反应的解决办法
    ASP.NET网站限制访问频率
    SQL 合并列值和拆分列值
    替换字符串第一次出现的某个字符
    HttpWebResponse远程服务器返回错误: (500) 内部服务器错误
    撒列实现关键字过虑
    sql关键字过滤C#方法
    WebRequest 对象的使用
    Request 分别获取具有相同 name 属性表单元素值
  • 原文地址:https://www.cnblogs.com/vigorous/p/13554030.html
Copyright © 2011-2022 走看看