gpt4 book ai didi

c# - 当我收到委托(delegate)时,StackExchange.Redis 没有检索到匹配的模式

转载 作者:可可西里 更新时间:2023-11-01 10:53:22 27 4
gpt4 key购买 nike

我正在实现由 Redis 的 Pub/Sub 提供的 signalR。为了与 Redis 交互,我使用了 StackExchange.Redis-1.2.6。

这里的问题是,当我在 signalR 集线器上订阅模式时,我创建了一个包含我感兴趣的 ConnectionId 和主题的组,并在 Redis Pub/Sub 上执行相同的操作。

当我收到消息时,我需要回溯并通知所有感兴趣的订阅者,但问题是 Redis 没有给我匹配的模式,而是给我发布的主题。

这是代码示例:

        ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
ISubscriber sub = redis.GetSubscriber();

RedisChannel channelWithLiteral = new RedisChannel("messages", RedisChannel.PatternMode.Literal);
sub.Subscribe(channelWithLiteral, (channel, message) =>
{
Console.WriteLine($"Literal -> channel: '{channel}' message: '{message}'");
});

RedisChannel channelWithPattern = new RedisChannel("mess*", RedisChannel.PatternMode.Pattern);
sub.Subscribe(channelWithPattern, (channel, message) =>
{
Console.WriteLine($"Pattern -> channel: '{channel}' message: '{message}'");
});

sub.Publish("messages", "hello");
Console.ReadLine();

输出是:

Literal -> channel: 'messages' message: 'hello'

Pattern -> channel: 'messages' message: 'hello'

我所期待/需要的:

Literal -> channel: 'messages' message: 'hello'

Pattern -> channel: 'mess*' message: 'hello'

关于 https://redis.io/topics/pubsub它说在使用 PSUBSCRIBE 时我们会同时收到通知:原始主题和匹配模式。

例子如下:

enter image description here

StackExchange.Redis 有没有办法接收匹配的模式?

最佳答案

我在 GitHub 上开了一个问题:RedisChannel is not retrieving the matched pattern when I receive the delegate :

你可以暂时看到一个变通的解决方案。

目前,唯一的方法是在订阅时“捕获”订阅 channel 。

解决方法如下:

  1. 在创建 Action 委托(delegate)之前,声明一个临时变量以将模式存储在临时的委托(delegate)操作引用上变量

  2. 每次有人尝试订阅时都会创建一个新的实例该变量并与 Redis 一起传递该信息 channel

这是代码示例:

public class MyTest
{
private readonly ISubscriber subscriber;

public MyTest()
{
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
this.subscriber = redis.GetSubscriber();
}

public void SubscribeWithPattern(string pattern)
{
RedisChannel channelWithPattern = new RedisChannel(pattern, RedisChannel.PatternMode.Pattern);
string originalChannelSubcription = pattern;
this.subscriber.Subscribe(channelWithPattern, (channel, message) =>
{
Console.WriteLine($"OriginalChannelSubcription '{originalChannelSubcription}");
Console.WriteLine($"Channel: '{channel}");
Console.WriteLine($"Message: '{message}'");
});
}

public void Publish(string channel, string message)
{
this.subscriber.Publish(channel, message);
}
}

关于c# - 当我收到委托(delegate)时,StackExchange.Redis 没有检索到匹配的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50505885/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com