-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Durable Consumer Does not Consume From Last Message Per Subject #5422
Comments
After point 3 - the crash or restart - do you send more messages in, do those not get consumed? The consumer will not deliver an already acked message, you cannot ask it to deliver acked messages again so that part is as designed. But after the restart the consumer should continue to deliver new messages. |
Thank you for your explanation. Let me provide a concrete example to clarify my understanding. Suppose I have two subjects in my stream, S1 and S2, and a durable consumer. After the consumer has acknowledged some messages but before it crashed, the consumer state is as follows (each message does not exceed the ack wait threshold, so no messages will be redelivered):
During the time the consumer is crashed, some new messages arrive, and the stream state becomes:
What I expect when the same durable consumer restarts is that it will receive the messages:
So, my questions are:
|
The key insight is that the consumer does not restart. It was always there. The client who connected to the consumer went away and crashed but the consumer remained on the server. When the crashed client - or another client - asks for messages the consumer continues where it was before. By not sending you already acknowledged messages. It does not even know you crashed. All the start config options - start sequence, time etc - only influence the consumer once and that’s when it is created. After that the behaviour is constant. It will only ever give you unacked messages. So probably what you want is to make a new consumer each time or use a “ordered consumer” |
Description
I have configured a NATS JetStream Durable Consumer to start consuming from the last ACKed message per subject after a crash and recovery. This is crucial for my application, as I need the last ACKed message to rebuild the consumer's old state.
To achieve this, I set the
DeliverPolicy
toDeliverLastPerSubjectPolicy
and theFilterSubject
to"*"
. However, after restarting the consumer, it does not consume any messages from the stream.Code Snippet
Here is the configuration code for my consumer:
Steps to Reproduce
Expected Behavior
After restarting, the consumer should start consuming from the last ACKed message per subject, as specified by the
DeliverLastPerSubjectPolicy
.Actual Behavior
The consumer does not consume any messages from the stream after a restart.
Additional Information
Thank you for your time and assistance!
The text was updated successfully, but these errors were encountered: