Pulsar: native per-message redelivery (#3177)#3199
Merged
Conversation
DotPulsar 5.1.2 has no negative-acknowledgment, so this adds opt-in native per-message redelivery using RedeliverUnacknowledgedMessages([messageId]) — the message is left unacknowledged and Pulsar redelivers just that one message (preserving its redelivery count) instead of acknowledging and re-publishing a fresh copy. - PulsarEndpoint.UseNativeRedelivery flag; PulsarListenerConfiguration.UseNativeRedelivery(). - PulsarListener.DeferAsync/TryRequeueAsync issue RedeliverUnacknowledgedMessages([id]) when set. - Key wiring: the Pulsar native-resiliency continuation (an AlwaysMatches failure rule applied by UsePulsar) previously no-op'd a failure when no retry-letter/dead-letter topic was configured, which preempts the generic Requeue continuation. It now performs native per-message redelivery in that case when UseNativeRedelivery is enabled. Existing retry-letter / DLQ / opt-out behavior is unchanged. Delayed/backoff redelivery remains the retry-letter topics' job (#3182). Tests: config unit test + integration test (handler fails first delivery, native redelivery re-delivers the same message, retry succeeds). Docs updated. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This was referenced Jun 23, 2026
Closed
This was referenced Jun 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of the Pulsar re-evaluation epic #3176. Fixes #3177 (reduced scope — DotPulsar 5.1.2 has no negative-acknowledgment; delayed/backoff redelivery stays with the retry-letter topics, #3182).
Adds opt-in native per-message redelivery: instead of acknowledging a failed message and re-publishing a fresh copy to the source topic, the message is left unacknowledged and Pulsar is asked to redeliver just that one message via
RedeliverUnacknowledgedMessages([messageId]), preserving its redelivery count.Changes
PulsarEndpoint.UseNativeRedelivery+PulsarListenerConfiguration.UseNativeRedelivery().PulsarListener.DeferAsync/TryRequeueAsyncissueRedeliverUnacknowledgedMessages([id])when enabled.AlwaysMatchesfailure rule installed byUsePulsar, which preempts the genericRequeuecontinuation) previously no-op'd a failure when no retry-letter/dead-letter topic was configured — leaving the message hanging. It now performs native per-message redelivery in that case whenUseNativeRedeliveryis set. Existing retry-letter / DLQ / opt-out behavior is unchanged.Tests
Docs
New "Per-Message Redelivery" section, noting that bounded/backoff redelivery uses the retry-letter topics.
🤖 Generated with Claude Code