zoukankan      html  css  js  c++  java
  • 发布和订阅

    发布/订阅,故名思义,就是一个发布消息,多个订阅的客户端都收到这个消息。

    举两个实际的例子,第一个想到的是电台,电台在专属的调频上播出节目,多个收音机只要在这个调频上,就可以收听到这个电台节目。

    另一个例子是博客的RSS,只要博言主发表了博客,只要订阅了该博客的人都会收到通知邮件。

    下面就结合redis的相关命令来看一下。

    publish channel message,将信息message发送到指的频道channel。

    subscribe channel [channel ...] 订阅给定的一个或多个频道的信息。

    Psubscribe pattern [pattern ...] 订阅一个或多个符合给定模式的频道。

    clipboard

    clipboard[1]

    看到了吧,这就是传说中的发布订阅。

    StackExchange.Redis中的发布订阅

    发布消息:ISubscriber.Publish(string channel, string message);

    订阅消息:ISubscriber.Subscribe(string channel, Action<string channel, string message> action);

    订阅时要异步去做,单独一个线程一直监听。

    可以参考如下代码。

    发布消息:

    subscriber.Publish(PbsRedisSubscribeChannels.ClearCacheChannel, message);

    订阅:

    public static void StartListenClearCache()
    
            {
    
                _listenTask = Task.Factory.StartNew(() =>
    
                {
    
                    Listen();
    
                }, TaskCreationOptions.LongRunning);
    
            }
    
            /// <summary>
    
            /// 监听线程内容:监听发布的消息
    
            /// </summary>
    
            private static void Listen()
    
            {
    
                try
    
                {
    
                    var client = RedisHelper.GetClientManager();
    
                    var subscriber = client.GetSubscriber();
    
                    subscriber.Subscribe(PbsRedisSubscribeChannels.ClearCacheChannel, HandleSubsMessage);
    
                    subscriber.Subscribe(PbsRedisSubscribeChannels.ReportCacheChannel, HandleSubsMessage);
    
                }
    
                catch (Exception ex)
    
                {
    
                    var mailContent = $"Redis订阅异常:{AppDomain.CurrentDomain.FriendlyName}({AppDomain.CurrentDomain.BaseDirectory}){Environment.NewLine}{ex.ToString()}";
    
                    SendMail(mailContent);
    
                }
    
            }
  • 相关阅读:
    陶瓷电容的结构、工艺、失效模式
    Vue.js最佳实践
    Vue 超快速学习
    CSS 小技巧
    HTML5 Canvas
    webkit下面的CSS设置滚动条
    Some untracked working tree files would be overwritten by checkout. Please move or remove them before you can checkout. View them
    JSCS: Please specify path to 'JSCS' package
    React中ref的使用方法
    React 60S倒计时
  • 原文地址:https://www.cnblogs.com/mcgrady/p/5082895.html
Copyright © 2011-2022 走看看