Когда, где и как использовать очереди? - PullRequest
14 голосов
/ 15 сентября 2011

Я новичок в разработке корпоративной Java, хотя уверен, что этот вопрос в равной степени относится к любому языку или платформе, например .NET.

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

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

Спасибо за понимание!

Ответы [ 4 ]

8 голосов
/ 15 сентября 2011

Вот несколько примеров, когда очередь сообщений может быть полезна.

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

Отделение услуг
Ключевой концепцией корпоративной интеграции является разделение систем, например, на рабочие процессы. Вместо того, чтобы системы общались друг с другом напрямую, они асинхронно отправляют сообщения в очереди. Затем компонент интеграции направляет и доставляет сообщение в соответствующую систему.

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

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

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

5 голосов
/ 15 сентября 2011

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

ИМО, они , а не для 100 * * каждого основного компонента обработки.

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

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

См. также ответ @ Qwerky, он (или она) делает несколько хороших замечаний.

0 голосов
/ 15 сентября 2011

Очереди сообщений по сути являются асинхронной системой связи. В этом случае это означает, что помимо очереди, которая связывает отправителя и получателя, отправитель и получатель работают независимо; получатель сообщения не требует (и не должен) взаимодействовать с отправителем. Аналогично, отправитель сообщения не требует (и не должен) взаимодействовать с получателем.

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

0 голосов
/ 15 сентября 2011

Пожалуйста, проверьте это:

http://code.google.com/p/disruptor/

В дикой природе существуют не только очереди для решения подобных проблем.

Отвечая на ваш вопрос. Очереди в этом случае будут вводить асинхронное поведение при доступе к вашим базам данных. В этом случае это больше вопрос о том, можете ли вы позволить себе такое большое влияние на ваши устаревшие системы. Просто может быть слишком много изменений, чтобы все выложить в очереди. Пожалуйста, опишите, каково основное назначение ваших систем. Тогда будет проще ответить на ваш вопрос полностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...