Skip to content

Commit c3ceaaf

Browse files
API updates to support function level autocomplete (Azure#21181)
* API updates to support function level autocomplete. * Fix test * Fix docs
1 parent 5696f9c commit c3ceaaf

14 files changed

+241
-96
lines changed

sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/api/Microsoft.Azure.WebJobs.Extensions.ServiceBus.netstandard2.0.cs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,21 +39,20 @@ public partial class MessageProcessor
3939
{
4040
public MessageProcessor(Azure.Messaging.ServiceBus.ServiceBusProcessor processor) { }
4141
protected internal Azure.Messaging.ServiceBus.ServiceBusProcessor Processor { get { throw null; } }
42-
public virtual System.Threading.Tasks.Task<bool> BeginProcessingMessageAsync(Microsoft.Azure.WebJobs.ServiceBus.ServiceBusMessageActions messageActions, Azure.Messaging.ServiceBus.ServiceBusReceivedMessage message, System.Threading.CancellationToken cancellationToken) { throw null; }
43-
public virtual System.Threading.Tasks.Task CompleteProcessingMessageAsync(Microsoft.Azure.WebJobs.ServiceBus.ServiceBusMessageActions messageActions, Azure.Messaging.ServiceBus.ServiceBusReceivedMessage message, Microsoft.Azure.WebJobs.Host.Executors.FunctionResult result, System.Threading.CancellationToken cancellationToken) { throw null; }
42+
protected internal virtual System.Threading.Tasks.Task<bool> BeginProcessingMessageAsync(Microsoft.Azure.WebJobs.ServiceBus.ServiceBusMessageActions messageActions, Azure.Messaging.ServiceBus.ServiceBusReceivedMessage message, System.Threading.CancellationToken cancellationToken) { throw null; }
43+
protected internal virtual System.Threading.Tasks.Task CompleteProcessingMessageAsync(Microsoft.Azure.WebJobs.ServiceBus.ServiceBusMessageActions messageActions, Azure.Messaging.ServiceBus.ServiceBusReceivedMessage message, Microsoft.Azure.WebJobs.Host.Executors.FunctionResult result, System.Threading.CancellationToken cancellationToken) { throw null; }
4444
}
4545
public partial class MessagingProvider
4646
{
47-
protected MessagingProvider() { }
4847
public MessagingProvider(Microsoft.Extensions.Options.IOptions<Microsoft.Azure.WebJobs.ServiceBus.ServiceBusOptions> options) { }
49-
public virtual Azure.Messaging.ServiceBus.ServiceBusReceiver CreateBatchMessageReceiver(Azure.Messaging.ServiceBus.ServiceBusClient client, string entityPath) { throw null; }
50-
public virtual Azure.Messaging.ServiceBus.ServiceBusClient CreateClient(string connectionString) { throw null; }
51-
public virtual Azure.Messaging.ServiceBus.ServiceBusClient CreateClient(string fullyQualifiedNamespace, Azure.Core.TokenCredential credential) { throw null; }
52-
public virtual Microsoft.Azure.WebJobs.ServiceBus.MessageProcessor CreateMessageProcessor(Azure.Messaging.ServiceBus.ServiceBusClient client, string entityPath) { throw null; }
53-
public virtual Azure.Messaging.ServiceBus.ServiceBusSender CreateMessageSender(Azure.Messaging.ServiceBus.ServiceBusClient client, string entityPath) { throw null; }
54-
public virtual Azure.Messaging.ServiceBus.ServiceBusProcessor CreateProcessor(Azure.Messaging.ServiceBus.ServiceBusClient client, string entityPath) { throw null; }
55-
public virtual Microsoft.Azure.WebJobs.ServiceBus.SessionMessageProcessor CreateSessionMessageProcessor(Azure.Messaging.ServiceBus.ServiceBusClient client, string entityPath) { throw null; }
56-
public virtual Azure.Messaging.ServiceBus.ServiceBusSessionProcessor CreateSessionProcessor(Azure.Messaging.ServiceBus.ServiceBusClient client, string entityPath) { throw null; }
48+
protected internal virtual Azure.Messaging.ServiceBus.ServiceBusReceiver CreateBatchMessageReceiver(Azure.Messaging.ServiceBus.ServiceBusClient client, string entityPath, Azure.Messaging.ServiceBus.ServiceBusReceiverOptions options) { throw null; }
49+
protected internal virtual Azure.Messaging.ServiceBus.ServiceBusClient CreateClient(string fullyQualifiedNamespace, Azure.Core.TokenCredential credential, Azure.Messaging.ServiceBus.ServiceBusClientOptions options) { throw null; }
50+
protected internal virtual Azure.Messaging.ServiceBus.ServiceBusClient CreateClient(string connectionString, Azure.Messaging.ServiceBus.ServiceBusClientOptions options) { throw null; }
51+
protected internal virtual Microsoft.Azure.WebJobs.ServiceBus.MessageProcessor CreateMessageProcessor(Azure.Messaging.ServiceBus.ServiceBusClient client, string entityPath, Azure.Messaging.ServiceBus.ServiceBusProcessorOptions options) { throw null; }
52+
protected internal virtual Azure.Messaging.ServiceBus.ServiceBusSender CreateMessageSender(Azure.Messaging.ServiceBus.ServiceBusClient client, string entityPath) { throw null; }
53+
protected internal virtual Azure.Messaging.ServiceBus.ServiceBusProcessor CreateProcessor(Azure.Messaging.ServiceBus.ServiceBusClient client, string entityPath, Azure.Messaging.ServiceBus.ServiceBusProcessorOptions options) { throw null; }
54+
protected internal virtual Microsoft.Azure.WebJobs.ServiceBus.SessionMessageProcessor CreateSessionMessageProcessor(Azure.Messaging.ServiceBus.ServiceBusClient client, string entityPath, Azure.Messaging.ServiceBus.ServiceBusSessionProcessorOptions options) { throw null; }
55+
protected internal virtual Azure.Messaging.ServiceBus.ServiceBusSessionProcessor CreateSessionProcessor(Azure.Messaging.ServiceBus.ServiceBusClient client, string entityPath, Azure.Messaging.ServiceBus.ServiceBusSessionProcessorOptions options) { throw null; }
5756
}
5857
public enum ServiceBusEntityType
5958
{
@@ -77,9 +76,9 @@ public ServiceBusOptions() { }
7776
public System.Func<Azure.Messaging.ServiceBus.ProcessErrorEventArgs, System.Threading.Tasks.Task> ExceptionHandler { get { throw null; } set { } }
7877
public Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { throw null; } set { } }
7978
public System.TimeSpan MaxAutoLockRenewalDuration { get { throw null; } set { } }
79+
public int MaxBatchSize { get { throw null; } set { } }
8080
public int MaxConcurrentCalls { get { throw null; } set { } }
8181
public int MaxConcurrentSessions { get { throw null; } set { } }
82-
public int MaxMessages { get { throw null; } set { } }
8382
public int PrefetchCount { get { throw null; } set { } }
8483
public System.TimeSpan? SessionIdleTimeout { get { throw null; } set { } }
8584
public Azure.Messaging.ServiceBus.ServiceBusTransportType TransportType { get { throw null; } set { } }

sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Config/ServiceBusClientFactory.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using Microsoft.Extensions.Azure;
1010
using Microsoft.Extensions.Configuration;
1111
using System;
12+
using Microsoft.Extensions.Options;
1213
using Constants = Microsoft.Azure.WebJobs.ServiceBus.Constants;
1314

1415
namespace Microsoft.Azure.WebJobs.Extensions.ServiceBus.Config
@@ -18,25 +19,28 @@ internal class ServiceBusClientFactory
1819
private readonly IConfiguration _configuration;
1920
private readonly AzureComponentFactory _componentFactory;
2021
private readonly MessagingProvider _messagingProvider;
22+
private readonly ServiceBusOptions _options;
2123

2224
public ServiceBusClientFactory(
2325
IConfiguration configuration,
2426
AzureComponentFactory componentFactory,
2527
MessagingProvider messagingProvider,
26-
AzureEventSourceLogForwarder logForwarder)
28+
AzureEventSourceLogForwarder logForwarder,
29+
IOptions<ServiceBusOptions> options)
2730
{
2831
_configuration = configuration;
2932
_componentFactory = componentFactory;
3033
_messagingProvider = messagingProvider;
34+
_options = options?.Value ?? throw new ArgumentNullException(nameof(options));
3135
logForwarder.Start();
3236
}
3337

3438
internal ServiceBusClient CreateClientFromSetting(string connection)
3539
{
3640
var connectionInfo = ResolveConnectionInformation(connection);
3741

38-
return connectionInfo.ConnectionString != null ? _messagingProvider.CreateClient(connectionInfo.ConnectionString)
39-
: _messagingProvider.CreateClient(connectionInfo.FullyQualifiedNamespace, connectionInfo.Credential);
42+
return connectionInfo.ConnectionString != null ? _messagingProvider.CreateClient(connectionInfo.ConnectionString, _options.ToClientOptions())
43+
: _messagingProvider.CreateClient(connectionInfo.FullyQualifiedNamespace, connectionInfo.Credential, _options.ToClientOptions());
4044
}
4145

4246
internal ServiceBusAdministrationClient CreateAdministrationClient(string connection)

sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Config/ServiceBusOptions.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ public int MaxConcurrentSessions
129129
/// Gets or sets the maximum number of messages that will be passed to each function call. This only applies for functions that receive
130130
/// a batch of messages. The default value is 1000.
131131
/// </summary>
132-
public int MaxMessages { get; set; } = 1000;
132+
public int MaxBatchSize { get; set; } = 1000;
133133

134134
/// <summary>
135135
/// Gets or sets the maximum amount of time to wait for a message to be received for the
@@ -179,7 +179,7 @@ string IOptionsFormatter.Format()
179179
{ nameof(MaxAutoLockRenewalDuration), MaxAutoLockRenewalDuration },
180180
{ nameof(MaxConcurrentCalls), MaxConcurrentCalls },
181181
{ nameof(MaxConcurrentSessions), MaxConcurrentSessions },
182-
{ nameof(MaxMessages), MaxMessages },
182+
{ nameof(MaxBatchSize), MaxBatchSize },
183183
{ nameof(SessionIdleTimeout), SessionIdleTimeout.ToString() ?? string.Empty }
184184
};
185185

@@ -212,6 +212,12 @@ internal ServiceBusSessionProcessorOptions ToSessionProcessorOptions() =>
212212
SessionIdleTimeout = SessionIdleTimeout
213213
};
214214

215+
internal ServiceBusReceiverOptions ToReceiverOptions() =>
216+
new ServiceBusReceiverOptions
217+
{
218+
PrefetchCount = PrefetchCount
219+
};
220+
215221
internal ServiceBusClientOptions ToClientOptions() =>
216222
new ServiceBusClientOptions
217223
{

sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Listeners/ServiceBusListener.cs

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ internal sealed class ServiceBusListener : IListener, IScaleMonitorProvider
2727
private readonly MessagingProvider _messagingProvider;
2828
private readonly ITriggeredFunctionExecutor _triggerExecutor;
2929
private readonly string _functionId;
30-
private readonly ServiceBusEntityType _serviceBusEntityType;
30+
private readonly ServiceBusEntityType _entityType;
3131
private readonly string _entityPath;
3232
private readonly bool _isSessionsEnabled;
3333
private readonly CancellationTokenSource _cancellationTokenSource;
@@ -49,7 +49,7 @@ internal sealed class ServiceBusListener : IListener, IScaleMonitorProvider
4949

5050
public ServiceBusListener(
5151
string functionId,
52-
ServiceBusEntityType serviceBusEntityType,
52+
ServiceBusEntityType entityType,
5353
string entityPath,
5454
bool isSessionsEnabled,
5555
ITriggeredFunctionExecutor triggerExecutor,
@@ -61,7 +61,7 @@ public ServiceBusListener(
6161
ServiceBusClientFactory clientFactory)
6262
{
6363
_functionId = functionId;
64-
_serviceBusEntityType = serviceBusEntityType;
64+
_entityType = entityType;
6565
_entityPath = entityPath;
6666
_isSessionsEnabled = isSessionsEnabled;
6767
_triggerExecutor = triggerExecutor;
@@ -70,12 +70,38 @@ public ServiceBusListener(
7070
_loggerFactory = loggerFactory;
7171
_logger = loggerFactory.CreateLogger<ServiceBusListener>();
7272

73-
_client = new Lazy<ServiceBusClient>(() => clientFactory.CreateClientFromSetting(connection));
74-
_batchReceiver = new Lazy<ServiceBusReceiver>(() => _messagingProvider.CreateBatchMessageReceiver(_client.Value, _entityPath));
75-
_messageProcessor = new Lazy<MessageProcessor>(() => _messagingProvider.CreateMessageProcessor(_client.Value, _entityPath));
76-
_sessionMessageProcessor = new Lazy<SessionMessageProcessor>(() => _messagingProvider.CreateSessionMessageProcessor(_client.Value, _entityPath));
73+
_client = new Lazy<ServiceBusClient>(
74+
() =>
75+
clientFactory.CreateClientFromSetting(connection));
76+
77+
_batchReceiver = new Lazy<ServiceBusReceiver>(
78+
() => _messagingProvider.CreateBatchMessageReceiver(
79+
_client.Value,
80+
_entityPath,
81+
options.ToReceiverOptions()));
82+
83+
_messageProcessor = new Lazy<MessageProcessor>(
84+
() => _messagingProvider.CreateMessageProcessor(
85+
_client.Value,
86+
_entityPath,
87+
options.ToProcessorOptions()));
88+
89+
_sessionMessageProcessor = new Lazy<SessionMessageProcessor>(
90+
() => _messagingProvider.CreateSessionMessageProcessor(
91+
_client.Value,
92+
_entityPath,
93+
options.ToSessionProcessorOptions()));
94+
95+
_scaleMonitor = new Lazy<ServiceBusScaleMonitor>(
96+
() => new ServiceBusScaleMonitor(
97+
_functionId,
98+
_entityType,
99+
_entityPath,
100+
connection,
101+
_batchReceiver,
102+
_loggerFactory,
103+
clientFactory));
77104

78-
_scaleMonitor = new Lazy<ServiceBusScaleMonitor>(() => new ServiceBusScaleMonitor(_functionId, _serviceBusEntityType, _entityPath, connection, _batchReceiver, _loggerFactory, clientFactory));
79105
_singleDispatch = singleDispatch;
80106
_serviceBusOptions = options;
81107
}
@@ -266,7 +292,7 @@ internal void StartMessageBatchReceiver(CancellationToken cancellationToken)
266292
}
267293

268294
IReadOnlyList<ServiceBusReceivedMessage> messages =
269-
await receiver.ReceiveMessagesAsync(_serviceBusOptions.MaxMessages).ConfigureAwait(false);
295+
await receiver.ReceiveMessagesAsync(_serviceBusOptions.MaxBatchSize).ConfigureAwait(false);
270296

271297
if (messages != null)
272298
{

sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Primitives/MessageProcessor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public MessageProcessor(ServiceBusProcessor processor)
3636
/// <param name="message">The <see cref="ServiceBusReceivedMessage"/> to process.</param>
3737
/// <param name="cancellationToken">A cancellation token that will be cancelled when the processor is shutting down.</param>
3838
/// <returns>A <see cref="Task"/> that returns true if the message processing should continue, false otherwise.</returns>
39-
public virtual Task<bool> BeginProcessingMessageAsync(ServiceBusMessageActions messageActions, ServiceBusReceivedMessage message, CancellationToken cancellationToken)
39+
protected internal virtual Task<bool> BeginProcessingMessageAsync(ServiceBusMessageActions messageActions, ServiceBusReceivedMessage message, CancellationToken cancellationToken)
4040
{
4141
return Task.FromResult<bool>(true);
4242
}
@@ -54,7 +54,7 @@ public virtual Task<bool> BeginProcessingMessageAsync(ServiceBusMessageActions m
5454
/// <param name="result">The <see cref="FunctionResult"/> from the job invocation.</param>
5555
/// <param name="cancellationToken">A cancellation token that will be cancelled when the processor is shutting down.</param>
5656
/// <returns>A <see cref="Task"/> that will complete the message processing.</returns>
57-
public virtual Task CompleteProcessingMessageAsync(ServiceBusMessageActions messageActions, ServiceBusReceivedMessage message, FunctionResult result, CancellationToken cancellationToken)
57+
protected internal virtual Task CompleteProcessingMessageAsync(ServiceBusMessageActions messageActions, ServiceBusReceivedMessage message, FunctionResult result, CancellationToken cancellationToken)
5858
{
5959
if (message is null)
6060
{

0 commit comments

Comments
 (0)