Redis-发布和订阅服务
2017-06-26 16:31
225 查看
一、发布和订阅介绍
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();
}
相关文章推荐
- .NET平台下Redis使用(六)【ServiceStack.Redis发布、订阅服务示例】
- ServiceStack.Redis订阅发布服务的调用
- ServiceStack.Redis订阅发布服务的调用(Z)
- redis代码 发布订阅
- redis数据库之订阅和发布
- 六 redis学习笔记之发布订阅
- redis 发布订阅
- .redis 发布订阅
- Spring Data Redis实现一个订阅/发布系统
- 利用redis的订阅和发布来实现实时监控的一个DEMO(Python版本)
- 利用redis的订阅和发布来实现实时监控的一个DEMO(Python版本)
- 六 redis学习笔记之发布订阅
- 简单的WCF发布-订阅(Pub/Sub)服务
- NoSQL之Redis高级应用--发布及订阅消息
- Redis的高级实用特性——发布及订阅消息
- redis学习笔记六之发布订阅
- Redis:六、发布、订阅
- 六 redis学习笔记之发布订阅
- python的redis,实用订阅发布简单实用代码
- Redis系列-JAVA与redis整合-Spring Data Redis实现一个订阅/发布系统