• 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);
    }
    
    
  • 相关阅读:
    朋友圈、浏览器分享实现
    Cannot read property 'appendChild' of null
    Nginx报错:Sorry, the page you are looking for is currently unavailable. Please try again later.
    RGBA(0,0,0,0)调色
    windows下 python中报错ImportError: No module named 'requests'
    一起谈.NET技术,C# 基础概念之延迟加载 狼人:
    一起谈.NET技术,为类提供软件约定 狼人:
    一起谈.NET技术,asp.net控件开发基础(6) 狼人:
    一起谈.NET技术,详解.NET程序集的加载规则 狼人:
    一起谈.NET技术,Linq学习笔记 狼人:
  • 原文地址:https://www.cnblogs.com/vigorous/p/13554030.html
Copyright © 2020-2023  润新知