sql >> データベース >  >> NoSQL >> Redis

RedisマネージドPub/サブサーバー

    RedisServerEventsとRedisMQを強化するPub/Subエンジンが抽出され、特定のRedis Pub/Subチャネルに公開されたメッセージを処理するために個別に使用できる再利用可能なクラスにカプセル化されました。

    RedisPubSubServer 自動的に再接続する管理されたバックグラウンドスレッドでメッセージを処理します redis-server接続が失敗し、コマンドで停止および開始できる独立したバックグラウンドサービスのように機能する場合。

    パブリックAPIは、IRedisPubSubServerインターフェースでキャプチャされます:

    public interface IRedisPubSubServer : IDisposable
    {
        IRedisClientsManager ClientsManager { get; }
        // What Channels it's subscribed to
        string[] Channels { get; }
    
        // Run once on initial StartUp
        Action OnInit { get; set; }
        // Called each time a new Connection is Started
        Action OnStart { get; set; }
        // Invoked when Connection is broken or Stopped
        Action OnStop { get; set; }
        // Invoked after Dispose()
        Action OnDispose { get; set; }
    
        // Fired when each message is received
        Action<string, string> OnMessage { get; set; }
        // Fired after successfully subscribing to the specified channels
        Action<string> OnUnSubscribe { get; set; }
        // Called when an exception occurs 
        Action<Exception> OnError { get; set; }
        // Called before attempting to Failover to a new redis master
        Action<IRedisPubSubServer> OnFailover { get; set; }
    
        int? KeepAliveRetryAfterMs { get; set; }
        // The Current Time for RedisServer
        DateTime CurrentServerTime { get; }
    
        // Current Status: Starting, Started, Stopping, Stopped, Disposed
        string GetStatus();
        // Different life-cycle stats
        string GetStatsDescription();
        
        // Subscribe to specified Channels and listening for new messages
        IRedisPubSubServer Start();
        // Close active Connection and stop running background thread
        void Stop();
        // Stop than Start
        void Restart();
    }
    

    使用法#

    RedisPubSubServerを使用するには 、サブスクライブするチャネルで初期化し、処理する各イベントにハンドラーを割り当てます。少なくとも、OnMessageを処理する必要があります :

    var clientsManager = new PooledRedisClientManager();
    var redisPubSub = new RedisPubSubServer(clientsManager, "channel-1", "channel-2") {
            OnMessage = (channel, msg) => "Received '{0}' from '{1}'".Print(msg, channel)
        }.Start();
    

    Start()を呼び出す 初期化されると、サブスクライブされたチャネルに公開されたメッセージのリッスンと処理を開始します。


    1. セキュリティのためのアーキテクチャ:MongoDBのガイド

    2. bluebirdを使用してnodejsですべてのプロミスが終了するのを待ちます

    3. Map-MongoDb 2.2、2.4、および2.6でパフォーマンスを低下させる

    4. mongodbは検索クエリで文字列として_idを取得します