Redis ServerEvents और Redis MQ को शक्ति प्रदान करने वाले पब/सब इंजन को निकाला गया है और इसे एक पुन:उपयोग करने योग्य वर्ग में इनकैप्सुलेट किया गया है जिसका उपयोग विशिष्ट रेडिस पब/उप चैनलों पर प्रकाशित संदेशों को संभालने के लिए स्वतंत्र रूप से किया जा सकता है।
RedisPubSubServer
संदेशों को एक प्रबंधित पृष्ठभूमि थ्रेड में संसाधित करता है जो स्वचालित रूप से पुन:कनेक्ट होता है जब रेडिस-सर्वर कनेक्शन विफल हो जाता है और एक स्वतंत्र पृष्ठभूमि सेवा की तरह काम करता है जिसे रोका जा सकता है और कमांड पर शुरू किया जा सकता है।
सार्वजनिक 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()
इसके आरंभ होने के बाद, यह सब्स्क्राइब्ड चैनलों पर प्रकाशित किसी भी संदेश को सुनना और संसाधित करना शुरू कर देगा।