kdcllc / CometD.NetCore

CometD for use with Salesforce Platform Events
MIT License
28 stars 16 forks source link

Subscribing with the last replay id makes the app receive the older events #27

Open mahesh2080 opened 2 years ago

mahesh2080 commented 2 years ago

The following issue occurs when a session is closed after 3 hours of inactivity. We are subscribing with the last replay id but the app receives older (already received) events.

code in main()

bayeuxClient.AddExtension(new ReplayExtension());
ClientSessionChannelListener clientSessionChannel = new ClientSessionChannelListener();
bayeuxClient.GetChannel(ChannelFields.META_HANDSHAKE).AddListener(clientSessionChannel);

code in ClientSessionChannelListener

public void OnMessage(IClientSessionChannel channel, IMessage message)
        {
            long lastProcessedReplayId = GetLastProcessedReplayId();
            _bayeuxClient.GetChannel('/topic', lastProcessedReplayId).Subscribe(new Listener(_platformEventsMessage, channelInfo));                        
        }

If we do not pass the last id, the app does not receive the already processed events (the issue does not occur). _bayeuxClient.GetChannel('/topic').Subscribe(new Listener(_platformEventsMessage, channelInfo));

Similar issue:

5