簡體   English   中英

在 Greenpipes/Masstransit 中使用 Partitioner 和 RateLimit

[英]Using Partitioner along with RateLimit in Greenpipes/Masstransit

我試圖了解是否可以在 Greenpipes 中組合 Partitioner 和 RateLimiter 過濾器。 我現在擁有的以下代碼無法按預期工作:

cfg.UseDispatch(new RequestConverterFactory(), d =>
{
    d.Handle<Request<RenderBasemapRequest>>(h =>
    {
        h.UsePartitioner(1,
            context => context.Request.ServiceProvider.GetService<IIdentityService>().CurrentIdentityId
            ); // 1 user can request only for 1 screenshot in parallel.
        h.UseRateLimit(5, TimeSpan.FromMinutes(1)); // 5 requests per user per minute
        h.UseHandler<RenderBasemapRequest, Stream>();
    });
});

我想限制用戶每分鍾最多只能發出 5 個請求。 但是無論上面是否有分區過濾器,UseRateLimit 都會全局設置它,所以我每分鍾一次為所有用戶收到 5 個請求。 是否可以使用 Greenpipes 過濾器實現我想要的效果? 有人可以給我一個提示嗎?

提前致謝。

首先,分區程序不會為每個用戶創建唯一的分區。 基本上,分區計數為 1 時,您創建的並發限制為 1。

它不會為每個鍵創建一個分區,它使用鍵來計算散列以將負載分散到可用分區中。

其次,它應該使用消息的屬性。 您正在訪問容器以獲取服務提供者並調用某些方法這一事實——是的,這有點超出了您在管道的那個階段應該做的事情。 可能會成為瓶頸,請注意。

速率限制有效,但它應該在分區器之前,並且不能識別或限制每個客戶端。 那是在Conductor中,但它還沒有准備好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM