實時監控.NET Core請求次數:建立記錄最近5分鐘的請求,輕鬆可靠

架构师老卢發表於2024-03-06
實時監控.NET Core請求次數:建立記錄最近5分鐘的請求,輕鬆可靠

概述:在.NET Core中,透過建立RequestCountMiddleware中介軟體,結合MemoryCache,實現了記錄最近5分鐘請求次數的功能。該中介軟體在每個請求中更新計數,並使用快取儲存,為簡單而實用的請求監控提供了一個示例。

要實現一個在.NET Core中記錄最近5分鐘請求次數的RequestCountMiddleware,你可以按照以下步驟操作。在這個例子中,我們將使用MemoryCache來儲存請求計數。

  1. 建立中介軟體類:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Caching.Memory;
using System;
using System.Threading.Tasks;

public class RequestCountMiddleware
{
    private readonly RequestDelegate _next;
    private readonly IMemoryCache _memoryCache;

    public RequestCountMiddleware(RequestDelegate next, IMemoryCache memoryCache)
    {
        _next = next ?? throw new ArgumentNullException(nameof(next));
        _memoryCache = memoryCache ?? throw new ArgumentNullException(nameof(memoryCache));
    }

    public async Task InvokeAsync(HttpContext context)
    {
        // 獲取當前時間的分鐘部分,以便將請求計數與時間關聯
        var currentMinute = DateTime.UtcNow.ToString("yyyyMMddHHmm");

        // 從快取中獲取當前分鐘的請求計數,如果不存在則初始化為0
        var requestCount = _memoryCache.GetOrCreate(currentMinute, entry =>
        {
            entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5);
            return 0;
        });

        // 增加請求計數
        requestCount++;

        // 更新快取中的請求計數
        _memoryCache.Set(currentMinute, requestCount);

        // 執行下一個中介軟體
        await _next(context);
    }
}
  1. 在Startup.cs中註冊中介軟體:

ConfigureServices方法中註冊MemoryCache服務,並在Configure方法中使用UseMiddleware新增RequestCountMiddleware

using Microsoft.Extensions.DependencyInjection;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // 註冊MemoryCache服務
        services.AddMemoryCache();
    }

    public void Configure(IApplicationBuilder app)
    {
        // 新增RequestCountMiddleware到中介軟體管道
        app.UseMiddleware<RequestCountMiddleware>();

        // 其他中介軟體...
    }
}
  1. 使用中介軟體:

現在,RequestCountMiddleware將在每個請求中記錄最近5分鐘的請求次數。 測試程式碼

    [ApiController]
    [Route("[controller]")]
    public class TestController : ControllerBase
    {

        private readonly IMemoryCache _memoryCache;

        public TestController(IMemoryCache memoryCache)
        {
            _memoryCache = memoryCache;
        }

        public IActionResult Index()
        {
            var currentMinute = DateTime.UtcNow.ToString("yyyyMMddHHmm");

            // 從快取中獲取當前分鐘的請求計數,如果不存在則初始化為0
            var requestCount = _memoryCache.Get<int>(currentMinute);
            return Ok($"5分鐘內訪問次數:{requestCount}次");
        }
    }

執行效果:

實時監控.NET Core請求次數:建立記錄最近5分鐘的請求,輕鬆可靠

請注意,這個示例使用MemoryCache來儲存請求計數,這意味著計數將在應用程式重新啟動時重置。如果需要永續性,可以考慮使用其他儲存方式,如資料庫。

原始碼獲取:
https://pan.baidu.com/s/1To2txIo9VDH2myyM4ecRhg?pwd=6666

相關文章