170 похожих чатов

Есть очередь на RabbitMQ но проблема в том что таски

пользователей которые туда попадают обрабатываются консюмерами последовательно в порядке поступления и получается пока таски одного пользователя не обработаются то таски другого не будет обрабатываться.
Есть ли что нибудь что бы дало возможность обрабатывать таски разных пользователей параллельно, равномерно распределив их между консюмерами?

9 ответов

16 просмотров

Запустить больше инстансов воркера

Artem-Vasilenko Автор вопроса

Это не решение с таким подходом можно использовать только одну очередь для всего.

Больше воркеров — быстрее разгребается очередь. Это решение.

Artem-Vasilenko Автор вопроса

Ну вот от одного пользователя поступило 1 000 000 тасок а от второго тоже 1 000 000 итд, и хоть сколько воркеров ты поднял а техничеки скорость не может быть обработки тасок по одному пользователю быстрей 10 в секунду и тогда консюмера будут гулять, хоть сколько их не подымай.

Ну заведи ты 100 очередей и кидай сообщения в них рандомно. Или не рандомно, а по какому-нибудь алгоритму (например, перед диспатчем выбрать менее нагруженную очередь). Каждую очередь запусти в несколько процессов.

Artem-Vasilenko Автор вопроса

Так не прокатит на реббите, я думаю он нагнеться если будет 1 000 000 очередей под каждого юзера

Я говорил про 100 очередей. И нет, не нагнется. У него есть ограничение на количество сообщений в одной очереди, но не на количество очередей. Плюс можно сделать очередь expires. Но как я сказал, лучше юзать бд. Это тупо надёжнее, раз у тебя такие объемы.

Поправка: все зависит от тачки. Если тачка позволяет, кролик будет ее насиловать, пока все не съест.

Приоритет

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта