У меня много задач, которые должны выполнять мои серверы.эти задачи должны выполняться с определенной заданной скоростью из-за ограничения скорости вызовов API, которому должны соответствовать сотрудники.
Чтобы гарантировать, что эти задачи не будут выполняться со скоростью, превышающей пределы скорости API, яхотел бы иметь возможность настроить скорость, с которой очередь отправляет сообщения для обработки.
Кроме того, эта очередь должна поддерживать порядок отправляемых сообщений и освобождать их в порядке FIFO, чтобы обеспечить честность.
Наконец, было бы здорово, если бы при кодировании это было бы прозрачно, когдаиспользуется для того, чтобы клиент отправлял сообщение в очередь через API-интерфейс, и тот же клиент получит обратно сообщение после его освобождения в очереди в соответствии с рабочей скоростью и соответствующим порядком.например, используя RxJava
waitForMessageToBeReleased(message, queue)
.subscribe(message -> // do some stuff) // message received to the same
client after it was released by the queue according to the defined work rate.
В настоящее время я использую Redis для управления скоростью выполнения, создавая переменную с определенным количеством TTL, и другие вызовы ждут, пока эта переменная не истечет.Однако он не обрабатывает заказы и может привести к тому, что клиенты начнут голодать в случае высокой нагрузки.