Откуда вопрос:
Мы используем RabbitMQ в качестве очереди задач. Одна из конкретных задач - рассылка уведомлений в социальную сеть Вконтакте. У API есть ограничение на количество запросов в секунду, и это ограничение зависит от размера вашего приложения. Всего 3 вызова для приложения с менее чем 100 тысячами человек и так далее. Поэтому нам нужно искусственно ограничивать запросы к их обслуживанию. Теперь эта логика основана на приложении. Это просто, пока вы можете использовать только одного воркера на такую очередь, просто установите что-то вроде сна (300 мс) и будьте спокойны. Но когда вы должны использовать N воркеров, эта синхронизация становится нетривиальной.
Как ограничить пропускную способность с помощью RabbitMQ?
На основе рассказа выше. Если бы было возможно установить размер предварительной выборки не только на основе сообщения, но и на основе времени, эта логика могла бы быть намного проще. Например, "QOS для 1 сообщения за получение не быстрее, чем 1 раз в секундах" или так далее.
- Есть ли что-то подобное?
- Может быть другая стратегия по этому поводу?