ServiceStack.Redis訂閱發布服務的調用


1.Redis訂閱發布介紹
Redis訂閱發布是一種消息通信模式:發布者(publisher)發送消息,訂閱者(Subscriber)接受消息。類似於設計模式中的觀察者模式。
發布者和訂閱者之間使用頻道進行通信,當需要發送消息時,發布者通過publish命令將消息發送到頻道上,該消息就會發送給訂閱這個頻道的訂閱者。

圖片來自於http://www.runoob.com/redis/redis-pub-sub.html

2.ServiceStack.Redis
  ServiceStack.Redis是Redis的C#版本的客戶端,是ServiceStack的一部分。
    ServiceStack的地址為https://servicestack.net

 

3.訂閱者
首先創建RedisClient,然后調用CreateSubscription()方法創建訂閱客戶端,然后設置訂閱客戶端的幾個事件:
OnMessage:接受到消息時。
OnSubscribe:訂閱頻道時。
OnUnSubscribe:取消訂閱頻道時。
最后,調用subscribeToChannels(channelName),訂閱頻道。
詳細代碼如下:

 1 /// <summary>
 2     /// Redis訂閱
 3     /// </summary>
 4     public static void Subscribe()
 5     {
 6         using (RedisClient consumer = new RedisClient("127.0.0.1", 6379))
 7         {
 8             //創建訂閱
 9             IRedisSubscription subscription = consumer.CreateSubscription();
10             //接受到消息時
11             subscription.OnMessage = (channel, msg) =>
12             {
13                 Console.WriteLine($"從頻道:{channel}上接受到消息:{msg},時間:{DateTime.Now.ToString("yyyyMMdd HH:mm:ss")}");
14                 Console.WriteLine($"頻道訂閱數目:{subscription.SubscriptionCount}");
15                 Console.WriteLine("___________________________________________________________________");
16             };
17             //訂閱頻道時
18             subscription.OnSubscribe = (channel) =>
19             {
20                 Console.WriteLine("訂閱客戶端:開始訂閱" + channel);
21             };
22             //取消訂閱頻道時
23             subscription.OnUnSubscribe = (a) => { Console.WriteLine("訂閱客戶端:取消訂閱"); };
24 
25             //訂閱頻道
26             subscription.SubscribeToChannels("channel1");
27         }
28     }

4.發布者
首先創建RedisClient,然后調用PublishMessage(channelName,message)發布消息。
詳細代碼如下:
RedisClient client = new RedisClient("127.0.0.1", 6379);
string message = "發布消息測試";
client.PublishMessage("channel1", message);

到目前為止,一個簡單的Redis發布訂閱就完成了。


5.Redis發布服務
使用發布者僅僅能夠發布消息,但是不能夠檢測一些事件的變化,Redis中還有一個RedisPublishServer的類,里面包括一些事件能夠使我們很好地檢測服務的運行。
OnMessage:接受到消息;
OnStart:發布服務開始運行時;
OnStop:發布服務停止運行時;
OnUnSubscribe:訂閱者取消訂閱時;
OnError:發布出現錯誤時;
OnFailover:Redis服務器冗余切換時;
發布服務端初始化完成后,調用Start()方法,開始執行發布服務。

發布服務執行后,執行消息的發布client.PublishMessage時,發布服務端也能夠接受到發布的消息。
詳細代碼如下:

 1 public void Publish()
 2     {
 3         //PooledRedisClientManager
 4         IRedisClientsManager redisClientManager = new PooledRedisClientManager("127.0.0.1:6379");
 5         //發布、訂閱服務 IRedisPubSubServer
 6         RedisPubSubServer pubSubServer = new RedisPubSubServer(redisClientManager, "channel1")
 7         {
 8             OnMessage = (channel, msg) =>
 9             {
10                 Console.WriteLine($"從頻道:{channel}上接受到消息:{msg},時間:{DateTime.Now.ToString("yyyyMMdd HH:mm:ss")}");
11                 Console.WriteLine("___________________________________________________________________");
12             },
13             OnStart = () =>
14             {
15                 Console.WriteLine("發布服務已啟動");
16                 Console.WriteLine("___________________________________________________________________");
17             },
18             OnStop = () => { Console.WriteLine("發布服務停止"); },
19             OnUnSubscribe = channel => { Console.WriteLine(channel); },
20             OnError = e => { Console.WriteLine(e.Message); },
21             OnFailover = s => { Console.WriteLine(s); },
22         };
23         //接收消息
24         pubSubServer.Start();
25     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM