0

私は現在、いくつかのパフォーマンス分析のために 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);
            }
        }

ありがとう。

4

1 に答える 1