次の問題は、非アクティブ状態が 3 時間続いた後にセッションを閉じると発生します。最後の再生 ID でサブスクライブしていますが、アプリは古い (既に受信した) イベントを受信します。
main() のコード
bayeuxClient.AddExtension(new ReplayExtension());
ClientSessionChannelListener clientSessionChannel = new ClientSessionChannelListener();
bayeuxClient.GetChannel(ChannelFields.META_HANDSHAKE).AddListener(clientSessionChannel);
ClientSessionChannelListener のコード
public void OnMessage(IClientSessionChannel channel, IMessage message)
{
long lastProcessedReplayId = GetLastProcessedReplayId();
_bayeuxClient.GetChannel('/topic', lastProcessedReplayId).Subscribe(new Listener(_platformEventsMessage, channelInfo));
}
最後の ID を渡さない場合、アプリは既に処理されたイベントを受け取りません (問題は発生しません)。
_bayeuxClient.GetChannel('/topic').Subscribe(new Listener(_platformEventsMessage, channelInfo));