如何在 Servicestack.Redis 中使用 "New Managed Pub/Sub Server" 取消订阅频道
How to unsubscribe from a channel using "New Managed Pub/Sub Server" in Servicestack.Redis
在 New Managed Pub/Sub Server 文档中,他们展示了如何在 pubsubserver 的初始化中订阅频道。但是,当需要时,您如何在程序的后面取消订阅特定频道?
我的代码:
using ServiceStack.Redis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
namespace va.communication
{
class Program
{
static void Main(string[] args)
{
var clientsManager = new PooledRedisClientManager();
//subscribe to channels 'messages' and 'queue'
var redisPubSub = new RedisPubSubServer(clientsManager, "messages","queue")
{
OnUnSubscribe = (channel) =>
{
Console.WriteLine("Unsubscribed from channel '{0}'", channel);
},
OnMessage = (channel, msg) =>
{
Console.WriteLine("Received '{0}' from channel '{1}'", msg, channel);
}
};
redisPubSub.Start();
//...
//other code which takes ~5s after which i want to unsubscribe from 'messages'
Thread.Sleep(5000);
//...
//no longer require channel 'messages'. what to do here?
while (true) ;//continue with other code
}
}
}
调用 Stop() 或 Dispose() 将取消订阅并停止收听订阅的频道。如果您想稍后再次开始收听,请使用 Stop() ;如果您已完成 RedisPubSubManager,请使用 Dispose() 。
感谢 mythz 和一些对我有用的研究:
取消订阅 'messages' 使用这个->
//reassign channels to just 'queue' removing 'messages' as a channel
redisPubSub.Channels = new string[] {"queue" };
要取消订阅所有频道,请使用此->
redisPubSub.Channels = new string[] { };//empty channel array
在 New Managed Pub/Sub Server 文档中,他们展示了如何在 pubsubserver 的初始化中订阅频道。但是,当需要时,您如何在程序的后面取消订阅特定频道?
我的代码:
using ServiceStack.Redis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
namespace va.communication
{
class Program
{
static void Main(string[] args)
{
var clientsManager = new PooledRedisClientManager();
//subscribe to channels 'messages' and 'queue'
var redisPubSub = new RedisPubSubServer(clientsManager, "messages","queue")
{
OnUnSubscribe = (channel) =>
{
Console.WriteLine("Unsubscribed from channel '{0}'", channel);
},
OnMessage = (channel, msg) =>
{
Console.WriteLine("Received '{0}' from channel '{1}'", msg, channel);
}
};
redisPubSub.Start();
//...
//other code which takes ~5s after which i want to unsubscribe from 'messages'
Thread.Sleep(5000);
//...
//no longer require channel 'messages'. what to do here?
while (true) ;//continue with other code
}
}
}
调用 Stop() 或 Dispose() 将取消订阅并停止收听订阅的频道。如果您想稍后再次开始收听,请使用 Stop() ;如果您已完成 RedisPubSubManager,请使用 Dispose() 。
感谢 mythz 和一些对我有用的研究:
取消订阅 'messages' 使用这个->
//reassign channels to just 'queue' removing 'messages' as a channel
redisPubSub.Channels = new string[] {"queue" };
要取消订阅所有频道,请使用此->
redisPubSub.Channels = new string[] { };//empty channel array