Redis
 sql >> база данни >  >> NoSQL >> Redis

Redis управляван Pub/Sub сървър

Pub/Sub двигателят, захранващ Redis ServerEvents и Redis MQ, е извлечен и капсулиран в клас за повторно използване, който може да се използва независимо за обработка на съобщения, публикувани в конкретни Redis Pub/Sub канали.

RedisPubSubServer обработва съобщения в управлявана фонова нишка, която автоматично се свързва отново когато връзката с redis-сървър се провали и работи като независима фонова услуга, която може да бъде спряна и стартирана по команда.

Публичният 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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Проверка дали дадена стойност вече съществува в списък Redis

  2. Как *правилно* запитвате Redis от Tornado?

  3. Redisson, работеща опашка/декеу. Стратегии за обработка на съобщение/елемент за непълна обработка на съобщения при изключване на системата/пода

  4. Как да приложите условие „ИЛИ“ в командата на клавишите за redis

  5. Redis Lua скрипт, внедряващ CAS (проверка и задаване)?