我很难将两者分开IRedisClient.PublishMessage
,IMessageQueueClient.Publish
并意识到我必须把一些东西混在一起。
ServiceStack 为我们提供了监听 pub/sub 广播的选项,如下所示:
static IRedisSubscription _subscription;
static IRedisClient redisClientSub;
static int received = 0;
static void ReadFromQueue()
{
redisClientSub = redisClientManager.GetClient();
_subscription = redisClientSub.CreateSubscription();
_subscription.OnMessage = (channel, msg) =>
{
try
{
received++;
}
catch (Exception ex)
{
}
};
Task.Run(() => _subscription.SubscribeToChannels("Test"));
}
看起来不错,简单明了。但是制作人呢?
在查看可用的类时,我认为可以使用IRedisClient.PublishMessage(string toChannel, string message)
或IMessageQueueClient.Publish(string queueName, IMessage message)
.
redisClient.PublishMessage("Test", json);
// or:
myMessageQueueClient.Publish("Test", new Message<CoreEvent>(testReq));
在这两种情况下,您都需要自己指定通道名称。这是我看到的行为:
- 上面的订阅者只有在我使用时才会收到消息,如果我使用
IRedisClient.PublishMessage(string toChannel, string message)
则永远不会收到IMessageQueueClient.Publish(string queueName, IMessage message)
- 如果我使用 发布
IRedisClient.PublishMessage
,我希望填充“测试”通道(如果我使用 Redis 浏览器查看),但事实并非如此。我从来没有看到任何队列的痕迹(假设我没有开始订阅,但生产者添加了消息) - 如果我使用 发布
IMessageQueueClient.Publish(string queueName, IMessage message)
,则创建通道“测试”并将消息保留在那里,但永远不会弹出/提取和删除。
我想了解两者之间的区别。我查看了源代码并阅读了所有关于它的内容,但我没有找到任何关于IRedisClient.PublishMessage
.