.NET平台下Redis使用(六)【ServiceStack.Redis发布、订阅服务示例】

人所缺乏的不是才干而是志向,不是成功的能力而是勤劳的意志。


订阅者

首先创建RedisClient,然后调用CreateSubscription()方法创建订阅客户端,然后设置订阅客户端的几个事件:

OnMessage:接受到消息时。

OnSubscribe:订阅频道时。

OnUnSubscribe:取消订阅频道时。

最后,调用subscribeToChannels(channelName),订阅频道。

 class Program
    {
        static void Main(string[] args)
        {
             
            //订阅
            Subscription();
        }
 
        /// <summary>
        /// 订阅
        /// 一个客户端订阅channel-1
        /// </summary>
        public static void Subscription()
        {
            using (var consumer = new RedisClient("127.0.0.1", 6379, "123456"))
            {
                //创建订阅
                IRedisSubscription subscription = consumer.CreateSubscription();

                //接受到消息时的委托
                subscription.OnMessage = (channel, msg) =>
                {
                    Console.WriteLine("频道【" + channel + "】订阅客户端接收消息:" + ":" + msg + " [" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "]");
                    Console.WriteLine("订阅数:" + subscription.SubscriptionCount);
                    Console.WriteLine("___________________________________________________________________");
                };

                //订阅事件处理
                subscription.OnSubscribe = channel => { Console.WriteLine("订阅客户端:开始订阅" + channel); };

                //取消订阅事件处理
                subscription.OnUnSubscribe = a => { Console.WriteLine("订阅客户端:取消订阅"); };
 
                //订阅频道
                subscription.SubscribeToChannels("channel-1");
 
            }
        }

    }

发布者

首先创建RedisClient,然后调用PublishMessage(channelName,message)发布消息。

class Program
    {
        static void Main(string[] args)
        {

            using (IRedisClient publisher = new RedisClient("127.0.0.1", 6379, "123456"))
            {
                for (int i = 1; i <= 100; i++)
                {
                    publisher.PublishMessage("channel-1", string.Format("这是我发送的第{0}消息!", i));
                    Thread.Sleep(200);
                }
            }
        }
    }

结果如图:

这里写图片描述


这里写图片描述

Redis发布订阅 服务

  class Program
    {
        static void Main(string[] args)
        { 
            //发布服务
            Pub();
            Console.ReadLine();
        }

        #region Redis发布服务
        //使用发布者仅仅能够发布消息,但是不能够检测一些事件的变化,Redis中还有一个RedisPublishServer的类,里面包括一些事件能够使我们很好地检测服务的运行。
        //OnMessage:接受到消息;
        //OnStart:发布服务开始运行时;
        //OnStop:发布服务停止运行时;
        //OnUnSubscribe:订阅者取消订阅时;
        //OnError:发布出现错误时;
        //OnFailover:Redis服务器冗余切换时;
        //发布服务端初始化完成后,调用Start()方法,开始执行发布服务。
        //发布服务执行后,执行消息的发布client.PublishMessage时,发布服务端也能够接受到发布的消息。
        public static void Pub()
        {
            //PooledRedisClientManager
            IRedisClientsManager RedisClientManager = new PooledRedisClientManager("123456@127.0.0.1:6379");

            //发布、订阅服务 IRedisPubSubServer'
            //订阅频道channel-1,channel-2
            var pubSubServer = new RedisPubSubServer(RedisClientManager, "channel-1", "channel-2");

            //接受到消息时的委托
            pubSubServer.OnMessage = (channel, msg) =>
            {

                Console.WriteLine("【Redis发布服务APP】从频道{0}接收消息:{1}  时间:{2}", channel, msg, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
                Console.WriteLine("___________________________________________________________________");
            };
            pubSubServer.OnStart = () =>
            {
                Console.WriteLine("发布服务已启动");
                Console.WriteLine("___________________________________________________________________");
            };
            pubSubServer.OnStop = () => { Console.WriteLine("服务停止"); };

            //取消订阅频道时
            pubSubServer.OnUnSubscribe = channel =>
            {
                Console.WriteLine(channel);
            };
            pubSubServer.OnError = e => { Console.WriteLine(e.Message); };
            pubSubServer.OnFailover = s => { Console.WriteLine(s); };
            //pubSubServer.OnHeartbeatReceived = () => { Console.WriteLine("OnHeartbeatReceived"); };
            //pubSubServer.OnHeartbeatSent = () => { Console.WriteLine("OnHeartbeatSent"); };
            //pubSubServer.IsSentinelSubscription = true;
            //接收消息
            pubSubServer.Start();
        }
        #endregion
    }

当运行发布者,此发布订阅服务程序执行如图:

这里写图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值