Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/Middleware/ConcurrencyLimiter/sample/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@ public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddConcurrencyLimiterStackPolicy(options =>
services.AddConcurrencyLimiter(options =>
{
options.MaxConcurrentRequests = 2;
options.MaxConcurrentRequests = 2;
options.RequestQueueLimit = 25;
});
}).AddStackPolicy();
}

public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
Expand Down
24 changes: 24 additions & 0 deletions src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information

using System;
using Microsoft.Extensions.DependencyInjection;

namespace Microsoft.AspNetCore.ConcurrencyLimiter
{
public class ConcurrencyLimiterBuilder
{
public ConcurrencyLimiterBuilder(IServiceCollection services)
{
Services = services ?? throw new ArgumentNullException(nameof(services));
}

/// <summary>
/// Gets the <see cref="IServiceCollection"/> services are attached to.
/// </summary>
/// <value>
/// The <see cref="IServiceCollection"/> services are attached to.
/// </value>
public IServiceCollection Services { get; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information

using System;
using Microsoft.AspNetCore.ConcurrencyLimiter;

namespace Microsoft.Extensions.DependencyInjection
{
public static class ConcurrencyLimiterBuilderExtensions
{
/// <summary>
/// Tells <see cref="ConcurrencyLimiterMiddleware"/> to use a FIFO queue as its queueing strategy.
/// </summary>
/// <param name="builder"></param>
/// <returns></returns>
public static ConcurrencyLimiterBuilder AddQueuePolicy(this ConcurrencyLimiterBuilder builder)
{
builder.Services.AddSingleton<IQueuePolicy, QueuePolicy>();
return builder;
}

/// <summary>
/// Tells <see cref="ConcurrencyLimiterMiddleware"/> to use a LIFO stack as its queueing strategy.
/// </summary>
/// <param name="builder"></param>
/// <returns></returns>
public static ConcurrencyLimiterBuilder AddStackPolicy(this ConcurrencyLimiterBuilder builder)
{
builder.Services.AddSingleton<IQueuePolicy, StackPolicy>();
return builder;
}

/// <summary>
/// Tells <see cref="ConcurrencyLimiterMiddleware"/> to use a LIFO stack as its queueing strategy.
/// </summary>
/// <param name="services">The <see cref="IServiceCollection"/> to add services to.</param>
/// <param name="configure">Set the options used by the queue.
/// Mandatory, since <see cref="QueuePolicyOptions.MaxConcurrentRequests"></see> must be provided.</param>
/// <returns></returns>
public static IServiceCollection AddConcurrencyLimiterStackPolicy(this IServiceCollection services, Action<QueuePolicyOptions> configure)
{
services.Configure(configure);
return services;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using Microsoft.AspNetCore.ConcurrencyLimiter;

namespace Microsoft.Extensions.DependencyInjection
{
public static class ConcurrencyMiddlewareServiceCollectionExtensions
{
/// <summary>
///
/// </summary>
/// <param name="services">The <see cref="IServiceCollection"/> to add services to.</param>
/// <param name="configure">Set the options used by the queue.
/// <returns></returns>
public static ConcurrencyLimiterBuilder AddConcurrencyLimiter(this IServiceCollection services, Action<QueuePolicyOptions> configure)
{
services.Configure(configure);

return new ConcurrencyLimiterBuilder(services);
}

/// <summary>
///
/// </summary>
/// <param name="services">The <see cref="IServiceCollection"/> to add services to.</param>
/// <param name="configure">Set the options used by the queue.
/// <returns></returns>
public static ConcurrencyLimiterBuilder AddConcurrencyLimiter(this IServiceCollection services, Action<QueuePolicyOptions, IServiceProvider> configure)
{
services.AddOptions<QueuePolicyOptions>().Configure(configure);

return new ConcurrencyLimiterBuilder(services);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ public static class QueuePolicyServiceCollectionExtensions
/// <param name="configure">Set the options used by the queue.
/// Mandatory, since <see cref="QueuePolicyOptions.MaxConcurrentRequests"></see> must be provided.</param>
/// <returns></returns>
public static IServiceCollection AddConcurrencyLimiterQueuePolicy(this IServiceCollection services, Action<QueuePolicyOptions> configure)
[Obsolete("This is obsolete and will be removed in a future version. Use AddConcurrencyLimiter(configure).AddQueuePolicy() instead")]
public static IServiceCollection AddQueuePolicy(this IServiceCollection services, Action<QueuePolicyOptions> configure)
{
services.Configure(configure);
services.AddSingleton<IQueuePolicy, QueuePolicy>();
Expand All @@ -32,7 +33,8 @@ public static IServiceCollection AddConcurrencyLimiterQueuePolicy(this IServiceC
/// <param name="configure">Set the options used by the queue.
/// Mandatory, since <see cref="QueuePolicyOptions.MaxConcurrentRequests"></see> must be provided.</param>
/// <returns></returns>
public static IServiceCollection AddConcurrencyLimiterStackPolicy(this IServiceCollection services, Action<QueuePolicyOptions> configure)
[Obsolete("This is obsolete and will be removed in a future version. Use AddConcurrencyLimiter(configure).AddStackPolicy() instead")]
public static IServiceCollection AddStackPolicy(this IServiceCollection services, Action<QueuePolicyOptions> configure)
{
services.Configure(configure);
services.AddSingleton<IQueuePolicy, StackPolicy>();
Expand Down