sql >> Database >  >> NoSQL >> Redis

Redis beheerde Pub/Sub-server

De Pub/Sub-engine die Redis ServerEvents en Redis MQ aandrijft, is geëxtraheerd en ingekapseld in een herbruikbare klasse die onafhankelijk kan worden gebruikt voor het afhandelen van berichten die zijn gepubliceerd op specifieke Redis Pub/Sub-kanalen.

RedisPubSubServer verwerkt berichten in een beheerde achtergrondthread die automatisch opnieuw verbinding maakt wanneer de redis-serververbinding mislukt en werkt als een onafhankelijke achtergrondservice die op commando kan worden gestopt en gestart.

De openbare API wordt vastgelegd in de IRedisPubSubServer-interface:

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();
}

Gebruik #

RedisPubSubServer gebruiken , initialiseer het met de kanalen waarop u zich wilt abonneren en wijs handlers toe voor elk van de gebeurtenissen die u wilt afhandelen. U wilt minimaal OnMessage . afhandelen :

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

Aanroepen van Start() nadat het is geïnitialiseerd, begint het te luisteren en alle berichten te verwerken die zijn gepubliceerd op de geabonneerde kanalen.


  1. Mongo DB-object-ID deserialiseren met JSON-serializer

  2. Een database in MongoDB neerzetten vanaf de opdrachtregel

  3. De MongoDB-foutlogboeken decoderen

  4. MongoDB $reverseArray