7.21.0 (2026-10-06)
Features Added
- Added
SqlFilterCountandCorrelationFilterCountproperties toTopicRuntimeProperties, exposing the total number of SQL filters and correlation filters across all of a topic's subscriptions. These are populated byGetTopicRuntimePropertiesAsyncandGetTopicsRuntimePropertiesAsync. - Added
ServiceBusAdministrationClientOptions.ServiceVersion.V2024_05and made it the default service version. The topic filter counts above are served by the2024-05service API version, so the administration client now sendsapi-version=2024-05by default. - Added
GetMessageSessionsAsyncoverloads onServiceBusClientfor queues and subscriptions. The no-filter overload returns the IDs of sessions that have active messages or session state, and thesessionStateUpdatedAfteroverload returns session IDs whose session state was updated after the specified timestamp. Implements thecom.microsoft:get-message-sessionsAMQP management operation. (#58761) - Added opt-in support for non-exclusive session locking on
ServiceBusSessionReceiver, allowing a session to be cooperatively taken over by another receiver. SetServiceBusSessionReceiverOptions.EnableNonExclusiveSessionto accept a session non-exclusively, then read the token fromServiceBusSessionReceiver.SessionLockTokenand pass it asServiceBusSessionReceiverOptions.SessionLockToken = Guid.Parse(token)to take that session over.ServiceBusSessionReceiver.IsSessionExclusivereports the mode the session was established under. Dispositions for a non-exclusive session are routed over the management link so that settlement keeps working across a takeover, which lowers settlement throughput compared to an exclusive session. This applies toServiceBusSessionReceiveronly;ServiceBusSessionProcessorcontinues to lock sessions exclusively. Accepting a session withEnableNonExclusiveSessionset throwsNotSupportedExceptionwhen the endpoint declines it, either by refusing the request outright or by accepting it without assigning a lock token, which is how a caller detects whether the feature is available for a namespace. An endpoint that declines in some other way surfaces the exception its own error maps to. (#60060)
Bugs Fixed
-
Fixed retry classification for web socket failures with nested causes. On modern .NET, a transient network failure during a web socket connection attempt surfaces as a
WebSocketExceptionthat wraps anHttpRequestException, which wraps the meaningfulIOExceptionorSocketException. The retry policy previously inspected only one level of nesting and treated these failures as terminal. The policy now unwraps nested wrapper exceptions to a bounded depth, so transient failures such as a connection reset use the configured retries. Terminal socket failures, such as host-not-found and host-unreachable, are not retried at any supported depth. A host-unreachable failure on an established connection is now terminal. Earlier versions retried it. (#61868) -
Fixed a bug where canceling
ServiceBusReceiver.CloseAsyncleft the receiver unable to close its own links. The receiver was marked as closed, and its set of locked messages disposed, before the cancellation was observed, so every later call toCloseAsyncreturned immediately without doing any work and the links stayed open until the owningServiceBusClientwas disposed. The receiver is now left open and closable when a close does not complete, so the operation can be retried. (#59309)
Other Changes
- The default
ServiceBusAdministrationClientservice version is now2024-05(previously2021-05). Existing operations are unaffected in behavior; the change is required to surface the new topic filter count properties.