Tài liệu

Nalix.Runtime.Middleware

Thời gian đọc 2 phút Gói: Nalix.Runtime
Trên trang này

Không gian tên: Nalix.Runtime.Middleware, Nalix.Runtime.Middleware.Standard, Nalix.Runtime.Throttling
Assembly: Nalix.Runtime

Middleware runtime tạo thành pipeline thực thi gói tin, nằm giữa bước khởi tạo PacketContext<TPacket> và bước gọi [PacketHandler]. Nó áp dụng kiểm soát quyền theo kiểu fail-closed, giới hạn tốc độ theo chính sách và theo endpoint, thời gian chờ cho handler và xử lý hậu kỳ phía outbound.

Ánh xạ mã nguồn

  • src/Nalix.Abstractions/Middleware/IPacketMiddleware.cs
  • src/Nalix.Abstractions/Middleware/MiddlewareOrderAttribute.cs
  • src/Nalix.Abstractions/Middleware/MiddlewareStageAttribute.cs
  • src/Nalix.Runtime/Middleware/MiddlewarePipeline.cs
  • src/Nalix.Runtime/Middleware/Standard/PermissionMiddleware.cs
  • src/Nalix.Runtime/Middleware/Standard/RateLimitMiddleware.cs
  • src/Nalix.Runtime/Middleware/Standard/TimeoutMiddleware.cs
  • src/Nalix.Runtime/Throttling/PolicyRateLimiter.cs
  • src/Nalix.Runtime/Throttling/TokenBucketLimiter.cs

Vòng đời thực thi

Architecture Diagram
flowchart TD
    Start(["ExecuteAsync(context, dispatch, descriptor, ct)"]) --> Inbound["Inbound Middleware (Ascending Order)"]
    Inbound -->|Calls next(ct)| Handler["ExecuteTerminalHandler (CanExecute + Invoker)"]
    Inbound -->|Short-circuits (no next)| End(["Pipeline Returns"])
    Handler --> Always["OutboundAlways Middleware (Descending Order)"]
    Always --> Decision{"!context.SkipOutbound && !ct.IsCancellationRequested?"}
    Decision -->|Yes| Outbound["Outbound Middleware (Descending Order)"]
    Decision -->|No| End
    Outbound --> End

Các giai đoạn middleware (MiddlewareStage)

Giai đoạnKhai báo attributeThứ tự sắp xếpThời điểm kích hoạt
Inbound[MiddlewareStage(MiddlewareStage.Inbound)] (mặc định)Order tăng dầnTrước khi handler chạy. Việc short-circuit bỏ qua handler và toàn bộ các giai đoạn outbound.
OutboundAlways[MiddlewareStage(MiddlewareStage.Outbound, AlwaysExecute = true)]Order giảm dầnLuôn chạy sau khi handler trả về hoặc bị hủy qua OperationCanceledException.
Outbound[MiddlewareStage(MiddlewareStage.Outbound)]Order giảm dầnChạy sau OutboundAlways chỉ khi !context.SkipOutbound và !token.IsCancellationRequested.
Both[MiddlewareStage(MiddlewareStage.Both)]Tăng dần (Inbound) và giảm dần (Outbound / OutboundAlways)Đăng ký cùng một instance middleware vào cả danh sách inbound lẫn outbound.

Middleware chuẩn tích hợp sẵn (Nalix.Runtime.Middleware.Standard)

MiddlewareOrderGiai đoạnHành vi khi chạy
PermissionMiddleware-50InboundKiểm tra [PacketPermission] theo kiểu fail-closed (MinimumLevel hoặc StrictMatch). Phát Directive(FAIL, UNAUTHORIZED) được kiểm soát bởi DirectiveGuard.
RateLimitMiddleware50InboundĐánh giá PolicyRateLimiter khi có [PacketRateLimit], hoặc TokenBucketLimiter toàn cục khi không có. Phát Directive(FAIL, RATE_LIMITED, RETRY).
TimeoutMiddleware75InboundÁp dụng [PacketTimeout(ms)] bằng các PooledCancellationTokenSource lấy từ pool. Phát Directive(TIMEOUT, TIMEOUT, RETRY).

API liên quan