В поисках решения одной задачи, исследовал некоторое MQ, а именно Apache ActiveMQ и RabbitMQ (zeromq только поверхностно). Но пока не могу определится, какая лучшая. И та и другая имеет интеграцию с несколькими языками.
Нужно выбрать по критериям:
— быстрая, стабильная
— хорошо-масштабируемая
Говорят, что с ActiveMQ хуже чем RabbitMQ, но пока подтверждения в недрах интернета не нашел.
Может кто-то из хабра-общества что-то может сказать про ту или другую.
Мы остановились на RabbitMQ и проблем с оным пока не наблюдалось.
По поводу сравнений и прочего, можно почитать например Тут. Там пишут что релизы ActiveMQ страдают от багов что весьма грустно на продакшене.
RabbitMQ не пробовал, но слышал негативные отзывы.
ActiveMQ у меня показал низкую производительность при работе с KahaDB — мне нужна была надёжная обработка сообщений (activemq делает sync после каждой записи в журнал и это поведение не настраивалось, можно было лишь отключить sync совсем), производительность была порядка 30 сообщений в секунду. Но я тестировал пару лет назад, может быть за это время что-нибудь сделали.
Я выбрал для себя HornetQ, его можно настроить так, чтобы он делал sync журнала в отдельном потоке N раз в секунду, т.е. немного пожертвовав надёжностью можно получить производительность на два-три порядка выше чем с sync после каждой записи в журнал.
Возможно у вас более подходящее железо.
Очередь точно была персистентной и надёжной записью (sync брокером после обработки каждого сообщения) или железо с raid контроллером и bbu?
Хотя прошло два года, может допилили что-то в activemq.
ivnik: почему-то только сейчас заметил ваш ответ. Тестировал на своём рабочем ноуте с SSD, процессор i3. Пробовал и персистентные, и не персистентные. В том числе пробовал предварительно перезагружать ActiveMQ чтобы ничего не было в кэше. Надёжная запись, вы имеете в виду получение ответа по сети, что сообщение было получено? Последнего пункта на тот момент не было, сейчас есть, но тесты я не повторял с ним.
А 100 000 персистентных сообщений без получения подтверждения уходило за 6,6 секунд, они же потреблялись за 36 секунд.
Если без персистентности - 2,4 секунду и 20 секунд.
Надо будет повторить опыты с получением подтверждения.
Сейчас другая проблема появилась, после двухмесячного аптайма 5.10.1 стал виснуть выжирая все ядра процессора. За тем кстати и зашёл на тостер, буду спрашивать.