我想知道使用 BookSleeve 发布和订阅频道的最佳方式是什么。我目前实现了几个静态方法(见下文),这些方法让我可以将内容发布到特定频道,新创建的频道存储在private static Dictionary<string, RedisSubscriberConnection> subscribedChannels;
.
这是正确的方法吗,因为我想发布到频道并订阅同一应用程序中的频道(注意:我的包装器是一个静态类)。即使我想发布和订阅,创建一个频道是否足够?显然,我不会发布到与在同一应用程序中订阅的频道相同的频道。但我测试了它并且它有效:
RedisClient.SubscribeToChannel("Test").Wait();
RedisClient.Publish("Test", "Test Message");
它奏效了。
这是我的问题:
1)设置一个专用的发布通道和一个专用的订阅通道而不是同时使用一个通道会更有效吗?
2)“channel”和“PatternSubscription”在语义上有什么区别?我的理解是我可以通过PatternSubscription()
同一个频道订阅多个“主题”,对吗?但是,如果我想为每个“主题”调用不同的回调,我必须为每个主题设置一个频道,对吗?那是有效的还是你会建议不要这样做?
这里是代码片段。
谢谢!!!
public static Task<long> Publish(string channel, byte[] message)
{
return connection.Publish(channel, message);
}
public static Task SubscribeToChannel(string channelName)
{
string subscriptionString = ChannelSubscriptionString(channelName);
RedisSubscriberConnection channel = connection.GetOpenSubscriberChannel();
subscribedChannels[subscriptionString] = channel;
return channel.PatternSubscribe(subscriptionString, OnSubscribedChannelMessage);
}
public static Task UnsubscribeFromChannel(string channelName)
{
string subscriptionString = ChannelSubscriptionString(channelName);
if (subscribedChannels.Keys.Contains(subscriptionString))
{
RedisSubscriberConnection channel = subscribedChannels[subscriptionString];
Task task = channel.PatternUnsubscribe(subscriptionString);
//remove channel subscription
channel.Close(true);
subscribedChannels.Remove(subscriptionString);
return task;
}
else
{
return null;
}
}
private static string ChannelSubscriptionString(string channelName)
{
return channelName + "*";
}