diff --git a/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/CHANGELOG.md b/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/CHANGELOG.md index 29a120c5f694..6c6d496a1a92 100644 --- a/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/CHANGELOG.md +++ b/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/CHANGELOG.md @@ -1,15 +1,16 @@ # Release History -## 5.14.0-beta.1 (Unreleased) - -### Features Added - -### Breaking Changes +## 5.13.1 (2023-10-17) ### Bugs Fixed +- Fixed the disposal pattern for cached Service Bus clients so that they are disposed only on + host shutdown. + ### Other Changes +- Updated the proto service definition to use bytes for application properties. + ## 5.13.0 (2023-10-11) ### Features Added diff --git a/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Config/ServiceBusExtensionConfigProvider.cs b/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Config/ServiceBusExtensionConfigProvider.cs index e1a66314b88c..aae0944a48b0 100644 --- a/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Config/ServiceBusExtensionConfigProvider.cs +++ b/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Config/ServiceBusExtensionConfigProvider.cs @@ -48,7 +48,8 @@ public ServiceBusExtensionConfigProvider( IConverterManager converterManager, ServiceBusClientFactory clientFactory, ConcurrencyManager concurrencyManager, - IDrainModeManager drainModeManager) + IDrainModeManager drainModeManager, + CleanupService cleanupService) { _options = options.Value; _messagingProvider = messagingProvider; diff --git a/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Config/ServiceBusHostBuilderExtensions.cs b/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Config/ServiceBusHostBuilderExtensions.cs index c110b1daef90..5c67e2dc787a 100644 --- a/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Config/ServiceBusHostBuilderExtensions.cs +++ b/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Config/ServiceBusHostBuilderExtensions.cs @@ -110,7 +110,7 @@ public static IWebJobsBuilder AddServiceBus(this IWebJobsBuilder builder, Action builder.Services.AddAzureClientsCore(); builder.Services.TryAddSingleton(); - builder.Services.AddHostedService(); + builder.Services.AddSingleton(); builder.Services.AddSingleton(); #if NET6_0_OR_GREATER builder.Services.AddSingleton(); diff --git a/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Microsoft.Azure.WebJobs.Extensions.ServiceBus.csproj b/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Microsoft.Azure.WebJobs.Extensions.ServiceBus.csproj index ba0898e39f32..2d26bfcb81c1 100644 --- a/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Microsoft.Azure.WebJobs.Extensions.ServiceBus.csproj +++ b/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Microsoft.Azure.WebJobs.Extensions.ServiceBus.csproj @@ -3,7 +3,7 @@ netstandard2.0;net6.0 Microsoft Azure WebJobs SDK ServiceBus Extension - 5.14.0-beta.1 + 5.13.1 5.13.0 diff --git a/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Primitives/CleanupService.cs b/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Primitives/CleanupService.cs index 20c62728c220..a868754d2cee 100644 --- a/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Primitives/CleanupService.cs +++ b/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Primitives/CleanupService.cs @@ -1,13 +1,14 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +using System; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Hosting; namespace Microsoft.Azure.WebJobs.ServiceBus { - internal class CleanupService : IHostedService + internal class CleanupService : IAsyncDisposable { private readonly MessagingProvider _provider; @@ -16,12 +17,7 @@ public CleanupService(MessagingProvider provider) _provider = provider; } - public Task StartAsync(CancellationToken cancellationToken) - { - return Task.CompletedTask; - } - - public async Task StopAsync(CancellationToken cancellationToken) + public async ValueTask DisposeAsync() { await _provider.DisposeAsync().ConfigureAwait(false); } diff --git a/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/tests/ServiceBusEndToEndTests.cs b/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/tests/ServiceBusEndToEndTests.cs index 2049f7b2897a..11c02a266ead 100644 --- a/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/tests/ServiceBusEndToEndTests.cs +++ b/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/tests/ServiceBusEndToEndTests.cs @@ -619,6 +619,8 @@ public async Task TestBatch_DataContractPoco() public async Task BindToPoco() { var host = BuildHost(); + var provider = host.Services.GetService(); + using (host) { await WriteQueueMessage("{ Name: 'foo', Value: 'bar' }"); @@ -630,6 +632,10 @@ public async Task BindToPoco() Assert.Contains("PocoValues(foo,bar)", logs); await host.StopAsync(); } + Assert.AreEqual(0, provider.ClientCache.Count); + Assert.AreEqual(0, provider.MessageReceiverCache.Count); + Assert.AreEqual(0, provider.MessageSenderCache.Count); + Assert.AreEqual(0, provider.ActionsCache.Count); } [Test] diff --git a/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/tests/WebJobsServiceBusTestBase.cs b/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/tests/WebJobsServiceBusTestBase.cs index 5353e6ef5cd1..9d5775e618fa 100644 --- a/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/tests/WebJobsServiceBusTestBase.cs +++ b/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/tests/WebJobsServiceBusTestBase.cs @@ -336,12 +336,6 @@ public async Task StopAsync(CancellationToken cancellationToken) QueueRuntimeProperties properties = await client.GetQueueRuntimePropertiesAsync(FirstQueueScope.QueueName, CancellationToken.None); Assert.AreEqual(ExpectedRemainingMessages, properties.ActiveMessageCount); - - var provider = _host.Services.GetService(); - Assert.AreEqual(0, provider.ClientCache.Count); - Assert.AreEqual(0, provider.MessageReceiverCache.Count); - Assert.AreEqual(0, provider.MessageSenderCache.Count); - Assert.AreEqual(0, provider.ActionsCache.Count); } private static bool IsError(LogMessage logMessage)