私は現在、いくつかのパフォーマンス分析のために Windows ポート バージョンに Redis バージョン 2.6.12 および 2.4.5 を使用しています。サブスクライバとして機能するウィンドウ サービスを持つ pub/sub アプリケーションを作成しました。パブリッシャーとして機能する別のウィンドウフォーム。
パブリッシャーから約 50++ 回連続してメッセージを送信した後で、そのことに気付きました。サブスクライバは、新しいメッセージへの応答を停止します。パブリッシャー側からスローされる例外はありません。
Redis の両方のバージョンで同じ動作が発生しました。
この種の奇妙な行動を経験した人はいますか?
これは、私の Windows フォーム (発行者) のコードです。
using (var redisPublisher = new RedisClient())
{
var message = new LastTrainProcessedMessage(DateTime.Now, "TEST", SystemMonitorStatus.Normal, 10);
label1.Text += (String.Format(@"Publishing '{0}' to '{1}'", message.ToString(), ChannelName)) + Environment.NewLine;
redisPublisher.PublishMessage(ChannelName, ServiceStack.Text.JsonSerializer.SerializeToString(message, typeof(LastTrainProcessedMessage)));
}
これは私のサブスクライバーからのコードです:
using (_redisConsumer = new RedisClient("localhost"))
using (_subscription = _redisConsumer.CreateSubscription())
{
try
{
_subscription.OnSubscribe = channel => _logger.Info(string.Format("Subscribed to '{0}'", channel));
_subscription.OnUnSubscribe = channel => _logger.Info(string.Format("UnSubscribed from '{0}'", channel));
_subscription.OnMessage = (channel, msg) =>
{
_logger.Info(string.Format("Received '{0}' from channel '{1}'", msg, channel));
var ltpm = JsonSerializer.DeserializeFromString<LastTrainProcessedMessage>(msg);
//persist to redis and trigger SignalR call...
_smState.UpdateLastTrainProcessedState(ltpm.ReadingTimestamp, ltpm.Location, SystemMonitorStatus.Normal);
_smState.AddAlerts(ltpm.NumberOfAlerts);
};
_logger.Info(string.Format("Started Listening On '{0}'", _channelName));
_subscription.SubscribeToChannels(_channelName); //blocking
}
catch (Exception ex)
{
_logger.Error(ex);
}
}
ありがとう。