Почему ActiveMQ, а не простая очередь/мьютекс?

Завтра я представлю свое обоснование выбора реализации внутрипроцессной очереди сообщений, и я не могу сформулировать свои доводы. Мои соавторы предлагают реализовать простую асинхронную очередь, используя только базовый список заданий и мьютекс для управления доступом, где я предлагаю ActiveMQ во встроенном режиме. Я лично был очень впечатлен ActiveMQ, и я хотел бы иметь несколько хороших, веских аргументов, подтверждающих мое внутреннее впечатление.

Если это имеет значение, приложение в основном представляет собой 1 производителя/n потребителей с информацией о приоритете и типе, относящейся к отдельным обрабатываемым заданиям.

Стоит отметить, что до сих пор управляемость и расширяемость решения не были весомыми аргументами. Я был бы рад, если бы кто-то мог придать моим аргументам больше силы. Поможет ли мне в этом форум?


person Chris R    schedule 17.04.2009    source источник


Ответы (3)


Аргументы ваших коллег небезосновательны. Добавление ActiveMQ в проект добавляет еще одну зависимость. Вероятно, его будет сложнее использовать, и он будет занимать больше места, чем пользовательское решение. Кроме того, поскольку вы принимаете его, вероятно, ваша ответственность будет заключаться в том, чтобы поддерживать и поддерживать бесперебойную работу - ошибки и все такое.

Тем не менее, ActiveMQ (и другие очереди) будут делать то, что вы могли бы написать сами, но это может оказаться проблемой. Одним из них является поддержка всего JMS API (хотя я предполагаю, что вы используете Java... если это не так, то этот пункт недействителен). Сериализация избыточных сообщений на диск в ситуациях с большим объемом памяти — еще один. Постоянные подписчики и селекторы сообщений — это еще несколько вещей, которые приходят на ум. Кажется, в основном это какие-то навороты для ваших нужд, но они становятся очень важными для надежной доставки сообщений.

Что бы вы ни решили, инкапсулируйте окончательный выбор брокера сообщений отдельно от клиентского кода, чтобы упростить переключение.

person Matt Green    schedule 17.04.2009

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

person 1800 INFORMATION    schedule 17.04.2009

Большим преимуществом является отсутствие необходимости отлаживать код параллелизма в странных пограничных случаях. Я не знаю, насколько важна эта структура как часть вашего общего проекта, но если очередь сообщений является большой частью вашего проекта, вы можете получить огромные преимущества, используя реализацию, которую кто-то другой написал, уже отладил и буду поддерживать для вас. Если это просто какая-то одноразовая часть неважной подсистемы, вероятно, не имеет значения, чем вы в конечном итоге будете заниматься. Но если это критично, я бы предпочел написать отчет об ошибке, чем тратить время на отладку параллельного кода (я уже начинаю отшатываться от страха!).

Краткая версия: не позволяйте синдрому NIH мешать вам использовать чужую работу, чтобы сделать свою работу быстрее, лучше и дешевле. Но и не стройте из мухи слона.

person kquinn    schedule 17.04.2009
comment
Вы делаете хорошее замечание, но вы должны иметь в виду, что вы никогда не должны использовать аутсорсинг для своего основного направления бизнеса. Я думаю, что Джоэл объяснил это в подкасте лучше, чем я, но чтобы проиллюстрировать это, он сказал, что если вы являетесь программным обеспечением id, то вы пишете свой собственный 3D-движок, но если вы пишете клон DOOM3, то вы используете чужой. Затем, в этом примере, вы должны решить, является ли очередь сообщений вашей основной задачей или второстепенной - если вы пишете ESB, то, вероятно, это... - person 1800 INFORMATION; 17.04.2009
comment
Я не согласен с таким ходом рассуждений. Да, если вы работаете в id Software, вы можете позволить себе написать собственный 3D-движок. Но в наши дни, когда везде можно найти высококачественный открытый исходный код, вполне разумно взять какой-нибудь открытый исходный код, чтобы начать свой проект. Да, если ваш продукт взлетит, у вас обязательно должен быть собственный основной код, либо написанный с нуля, либо в виде форка. Но разумное использование существующего кода может помочь стартапу или разрушить его. - person kquinn; 17.04.2009