如何解决ServiceStack.Mq:手动向通道添加数据时,为什么不触发IRedisSubscription.OnMessage?
我正在使用ServiceStack和IRedisSubscriber。我已经使其工作,触发了OnMessage。但是,有时它不会触发,而我试图找出原因。
基本设置是:
RedisClientManager = new PooledRedisClientManager("localhost:6379");
_mqServer = new RedisMqServer(RedisClientManager,retryCount: 2)
{
RequestFilter = RequestFilter
};
_mqServer.Start(); //Starts listening for messages
在一个单独的班级,我有:
public MqChannelSubscriber(string eventChannelName,Action<CoreRequest> onMessageReceived)
{
_redisClient = MqClientFactory.Instance.GetRedisClient();
_subscription = _redisClient.CreateSubscription();
_subscription.OnSubscribe = channel => Log.Instance.LogInfo($"Subscription started on {eventChannelName}");
_subscription.OnUnSubscribe = channel => Log.Instance.LogWarning($"Unsubscribed from {eventChannelName}");
_subscription.OnMessage = (channel,msg) =>
{
try
{
onMessageReceived(GetRequest(msg));
}
catch (Exception ex)
{
Log.Instance.LogException(ex);
}
};
Task.Run(() => _subscription.SubscribeToChannels(eventChannelName));
}
在这种情况下,eventChannelName是“ ObjectBroadcast”。
问题1: 如果我以Redis Insight为例手动添加了一个名为List的名为“ ObjectBroadcast”的新密钥并添加了一个条目,我希望OnMessage会在上面触发,但事实并非如此。为什么呢?
问题2: 通过执行此操作,我还有另一个产生这些“广播”的应用程序:
public static void Broadcast<T>(T coreBroadcast) where T : CoreBroadcast
{
// Option 1: this will trigger the OnMessage above
using (var redisClient = MqClientFactory.Instance.GetRedisClient())
{
string json = JsonConvert.SerializeObject(coreBroadcast,new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All
});
redisClient.PublishMessage(coreBroadcast.BroadcastChannel,json);
}
// Option 2: this will not trigger the OnMessage above
using (var messageQueueClient = MqClientFactory.Instance.CreateMessageQueueClient())
{
messageQueueClient.Publish(coreBroadcast.BroadcastChannel,new Message<T>(coreBroadcast));
}
}
以上是两种发送方式,即IRedisClient.PublishMessage和IMessageQueueClient.Publish。如注释中所述,选项1将触发OnMessage,但选项2不会触发。为什么呢?
在选项2中,我在Redis的ObjectBroadcast中看到生成的JSON,徘徊不去,并且从未检索过:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。