Skip to content

Adding CancellationToken to context.Items to subscribe - #105

Merged
mookid8000 merged 8 commits into
rebus-org:masterfrom
hdrachmann:add_eventing_for_failing_renewal
Oct 21, 2025
Merged

mookid8000 merged 8 commits into
rebus-org:masterfrom
hdrachmann:add_eventing_for_failing_renewal

Conversation

@hdrachmann

@hdrachmann hdrachmann commented May 13, 2025 •

Copy link
Copy Markdown
Contributor

We see a problem where Azure Service bus is never going to accept the renewal request for the locks - which results in a state where the message is never going to be completed by the handler.
This is a transient error - so instead we want to be able to fail fast.
This is done by adding a CancellationToken that can be listened to in the Handler to see whether to stop the handling of the message by throwing a OperationCancelException

token.ThrowIfCancellationIsRequested()

Enhancements to message lock renewal and cancellation:

@hdrachmann
hdrachmann requested a review from Copilot June 27, 2025 11:12

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR adds tracking and cancellation of message lock renewal tokens in the Azure Service Bus transport to ensure that renewal tasks can be stopped when a message is completed, abandoned, or an error occurs.

  • Introduces a _messageRenewerTokenSources dictionary to hold CancellationTokenSource instances per message.
  • Creates a linked cancellation token source in Receive and stores it in the context items.
  • Hooks into the OnAck, OnNack, and OnDisposed callbacks to remove token sources, and cancels them when renew failures occur.
Comments suppressed due to low confidence (1)

Rebus.AzureServiceBus/AzureServiceBus/AzureServiceBusTransport.cs:620

  • [nitpick] Consider renaming renewFailedTokenSource to something like renewalTokenSource or messageRenewalTokenSource for clarity.
        var renewFailedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, _cancellationToken);

Comment thread Rebus.AzureServiceBus/AzureServiceBus/AzureServiceBusTransport.cs Outdated
Comment thread Rebus.AzureServiceBus/AzureServiceBus/AzureServiceBusTransport.cs Outdated
@hdrachmann hdrachmann changed the title first try Adding CancellationToken to context.Items to subscribe Jun 27, 2025
@hdrachmann
hdrachmann requested a review from mookid8000 June 27, 2025 11:45
@hdrachmann

Copy link
Copy Markdown
Contributor Author

Hi @mookid8000
Could you take a quick look?

@mookid8000
mookid8000 merged commit 013da98 into rebus-org:master Oct 21, 2025
@mookid8000

Copy link
Copy Markdown
Member

Great work 👍 sorry for taking so long to react though 😅
It's out as Rebus.AzureServiceBus 10.5.0 on NuGet.org now 😽

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants