Redis-发布和订阅服务

一、发布和订阅介绍

    Redis订阅发布是一种消息通信模式:发布者(publisher)发送消息,订阅者(Subscriber)接受消息。类似于设计模式中的观察者模式。
发布者和订阅者之间使用频道进行通信,当需要发送消息时,发布者通过publish命令将消息发送到频道上,该消息就会发送给订阅这个频道的订阅者。

二、订阅者

    首先创建RedisClient,然后调用CreateSubscription()方法创建订阅客户端,然后设置订阅客户端的几个事件:
OnMessage:接受到消息时。
OnSubscribe:订阅频道时。
OnUnSubscribe:取消订阅频道时。
最后,调用subscribeToChannels(channelName),订阅频道。
/// <summary>
    /// Redis订阅
    /// </summary>
    public static void Subscribe()
    {
        using (RedisClient consumer = new RedisClient("127.0.0.1", 6379))
        {
            //创建订阅
            IRedisSubscription subscription = consumer.CreateSubscription();
            //接受到消息时
            subscription.OnMessage = (channel, msg) =>
            {
                Console.WriteLine($"从频道:{channel}上接受到消息:{msg},时间:{DateTime.Now.ToString("yyyyMMdd HH:mm:ss")}");
                Console.WriteLine($"频道订阅数目:{subscription.SubscriptionCount}");
                Console.WriteLine("___________________________________________________________________");
            };
            //订阅频道时
            subscription.OnSubscribe = (channel) =>
            {
                Console.WriteLine("订阅客户端:开始订阅" + channel);
            };
            //取消订阅频道时
            subscription.OnUnSubscribe = (a) => { Console.WriteLine("订阅客户端:取消订阅"); };

            //订阅频道
            subscription.SubscribeToChannels("channel1");
        }
    }

三、发布者

首先创建RedisClient,然后调用PublishMessage(channelName,message)发布消息。
详细代码如下:
RedisClient client = new RedisClient("127.0.0.1", 6379);
string message = "发布消息测试";
client.PublishMessage("channel1", message);

到目前为止,一个简单的Redis发布订阅就完成了。

四、Redis发布服务

使用发布者仅仅能够发布消息,但是不能够检测一些事件的变化,Redis中还有一个RedisPublishServer的类,里面包括一些事件能够使我们很好地检测服务的运行。
OnMessage:接受到消息;
OnStart:发布服务开始运行时;
OnStop:发布服务停止运行时;
OnUnSubscribe:订阅者取消订阅时;
OnError:发布出现错误时;
OnFailover:Redis服务器冗余切换时;
发布服务端初始化完成后,调用Start()方法,开始执行发布服务。

发布服务执行后,执行消息的发布client.PublishMessage时,发布服务端也能够接受到发布的消息。
详细代码如下:

public void Publish()
    {
        //PooledRedisClientManager
        IRedisClientsManager redisClientManager = new PooledRedisClientManager("127.0.0.1:6379");
        //发布、订阅服务 IRedisPubSubServer
        RedisPubSubServer pubSubServer = new RedisPubSubServer(redisClientManager, "channel1")
        {
            OnMessage = (channel, msg) =>
            {
                Console.WriteLine($"从频道:{channel}上接受到消息:{msg},时间:{DateTime.Now.ToString("yyyyMMdd HH:mm:ss")}");
                Console.WriteLine("___________________________________________________________________");
            },
            OnStart = () =>
            {
                Console.WriteLine("发布服务已启动");
                Console.WriteLine("___________________________________________________________________");
            },
            OnStop = () => { Console.WriteLine("发布服务停止"); },
            OnUnSubscribe = channel => { Console.WriteLine(channel); },
            OnError = e => { Console.WriteLine(e.Message); },
            OnFailover = s => { Console.WriteLine(s); },
        };
        //接收消息
        pubSubServer.Start();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值