Я заинтересован в использовании MassTransit в качестве шины событий, чтобы помочь мне перебрать кеш, но я не уверен, как правильно задросселировать службу.
Ситуация
У меня есть a. Net сервис с API refreshCache(itemId)
, который пересчитывает кеш для itemId
. Я хочу вызывать это всякий раз, когда код в моей организации изменяет любые данные, связанные с itemId
.
Однако из-за устаревшего кода у меня может быть 10 событий для данного itemId, сгенерированных в течение той же секунды. Поскольку вызов refreshCache(itemId)
стоит дорого, я бы предпочел вызывать его только раз в секунду или около того на itemId .
Например, представьте, что у меня есть 10 событий, генерируемых для item1
а затем отправлено 1 событие для item2
. Я бы хотел, чтобы refreshCache
вызывался дважды, один раз с item1
и один раз с item2
.
Проблемы с MassTransit
Я мог бы отправлять сообщения о событиях, которые, по сути, всего itemId
через SNS / SQS, а служба. Net может использовать потребителя MassTransit для прослушивания этой очереди SQS и вызова refreshCache
для каждого сообщения. В идеале я также могу дросселировать в SNS / SQS или MassTransit.
Я читал эти документы: https://masstransit-project.com/advanced/middleware/rate-limiter.html и пытался найти промежуточное ПО в коде, но не смог
Кажется, они предполагают, что ограничение скорости просто задерживает доставку сообщений, что означает, что мой refreshCache
будет вызываться 10 раз с помощью item1
, прежде чем получить вызов с помощью item2
. Вместо этого я бы предпочел, чтобы его вызывали один раз для каждого элемента, в идеале оба сразу.
Точно так же кажется, что SNS и SQS могут либо ограничить скорость доставки по заказу или регулирование на основе очереди , , но не на основе содержимого этой очереди. Для меня было бы невозможно создать отдельные очереди на itemId
, так как будет более 100000 различных идентификаторов элементов.
Спрос
Это то, что я пытаюсь сделать, возможно в MassTransit ? Если нет, возможно ли это через SQS? Я также могу проявить творческий подход, используя RabbitMQ или добавляя Lambdas, но предпочел бы, чтобы это было просто.