ruby - 为消息队列实现类似 "leaky bucket"的算法

标签 ruby redis rabbitmq throttling rate-limiting

我有一个基于 ruby​​ 的应用程序,它有许多不同的消息队列(+200 个不同的队列),所有这些都需要单独进行 throttle/速率限制。我试图用这个糖果自动售货机类比来说明问题

Leaky Candy Vending Machine

现在我将如何着手实现这样的系统/算法?我一直在考虑将消息/“糖果”放入不同的 redis 列表/集合或 RabbitMQ 队列中,但是让它们以单独的速率从每个队列中弹出似乎是一项艰巨的任务。是否有一些技术比 Redis 更适合这项工作?

最佳答案

你可以使用 Resque (它也使用 Redis 进行持久化)。您可以为每种类型的“糖果”使用不同的队列,并为每个队列启动一个 worker,并为 --interval 选项设置不同的值。

$ bin/resque work --queues=blue  --interval=10
$ bin/resque work --queues=green --interval=2
$ bin/resque work --queues=red   --interval=5

关于ruby - 为消息队列实现类似 "leaky bucket"的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29117729/

相关文章:

mysql - 在 MySQL 和 Ruby 中转义字符

ruby - 使用 Ruby 和 Sinatra,尝试填充页面上的某个区域而不重新加载整个页面

javascript - SailsJS 覆盖模型方法

mongodb - 从数据库按时间间隔调度任务的最佳方法

rabbitmq - 为什么使用 AMQP/ZeroMQ/RabbitMQ

javascript - form_for 表单的字符计数器未实时更新计数

ruby-on-rails - 在 Rails 应用程序中运行 rake 任务

.net-core - 无法写入AOF

node.js - 测试 RabbitMQ/MQTT 性能

python - RabbitMQ:如何在 Python 生产者和消费者之间发送 Python 字典?