15
rateFn quotas.RateFn,
16
maxReaders int64,
18
>
rateLimiters := make(map[int]quotas.RequestRateLimiter, maxReaders)
19
>
readerCallerToPriority := make(map[string]int, maxReaders)
20
>
for readerId := DefaultReaderId; readerId != DefaultReaderId+maxReaders; readerId++ {
21
>
// use readerId as priority
22
>
rateLimiters[int(readerId)] = quotas.NewRequestRateLimiterAdapter(quotas.NewDefaultOutgoingRateLimiter(rateFn))
23
>
// reader will use readerId (in string type) as caller when using the rate limiter
24
>
readerCallerToPriority[newReaderRequest(readerId).Caller] = int(readerId)
25
>
}
26
>
lowestPriority := int(DefaultReaderId + maxReaders - 1)
27
>
28
>
return quotas.NewPriorityRateLimiter(
29
>
func(req quotas.Request) int {
30
if priority, ok := readerCallerToPriority[req.Caller]; ok {
31
return priority