Skip to content

Adding CancellationToken to context.Items to subscribe #105

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

Open
wants to merge 8 commits into
base: master
Choose a base branch
from

Conversation

hdrachmann
Copy link

@hdrachmann hdrachmann commented May 13, 2025

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
Copy link

@Copilot Copilot AI left a comment

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);

@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
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.

2 participants