zoukankan      html  css  js  c++  java
  • 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     }
  • 相关阅读:
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
  • 原文地址:https://www.cnblogs.com/DreamOfLife/p/5667201.html
Copyright © 2011-2022 走看看