Фоновая обработка временных данных через очереди сообщений в приложении Java EE - PullRequest
1 голос
/ 26 октября 2011

Я создаю веб-приложение Java EE, которое также имеет JAX-RS API, чтобы плагины на других веб-сайтах могли отправлять на него данные, воспринимать его как сервер аналитики, который получает данные с различных клиентских сайтов и имеет своисобственный интерфейс администратора, где можно просматривать статистику.

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

Как мне впоследствии реализовать фоновую обработку этих данных?Должен ли я сам создавать потоки или использовать систему очередей сообщений (я посмотрел на RabbitMQ и он выглядит многообещающим, однако я не уверен, подходит ли он для встраивания в приложение Java EE)

ТакжеДолжен ли я сохранять временные данные (одну порцию информации от пользователя в виде строки JSON / XML) в моей текущей базе данных, или вы считаете, что сохранение в другой временной базе данных более уместно, например, я снова слышал оnosql данные, такие как Redis, mongodb и т. д., однако не могут решить, подходят ли они для этого.

Наконец, если мне следует использовать очередь сообщений, должны ли запросы обрабатываться очередью сообщений или снова JAX-RS?Моя забота о JAX-RS заключается в том, что он может быть не таким производительным, как очереди, и, как я уже сказал, мне действительно не нужен API, я просто хочу получить одну строку в кодировке base-64 (которая содержит различную статистическую информацию)с клиентских веб-сайтов.

1 Ответ

1 голос
/ 31 октября 2011

Здесь много вопросов :) Я постараюсь ответить по порядку:

  • Вы не сможете встроить RabbitMQ в свое приложение JavaEE, потому что оно работает на Erlang.Если для вас требуется встраивание брокера сообщений в приложение JavaEE, вы бы предпочли использовать ActiveMQ или HornetQ.
  • Если вы используете функцию длительного хранения в системе обмена сообщениями, вам не нужно хранитьвходящие сообщения во временной базе данных.Этот подход будет хорошо работать для вас, если ваши входящие сообщения будут маленькими (КБ, а не МБ).
  • Использование системы обмена сообщениями в качестве основного хранителя входящих сообщений также даст ответ на ваш вопрос: используйте 1-nодновременные потребители (т.е. одновременные потребители для конкретной выбранной вами системы обмена сообщениями) в очереди сообщений для обработки сообщений и записи результатов в базу данных статистики.
  • Наконец, дважды подумайте о том, чтобы вместо этого напрямую разоблачить свою систему обмена сообщениями.позади HTTP-фасада (JAX-RS в вашем случае), так как не все ваши клиенты могут иметь возможность говорить на правильном протоколе (если вы выбираете RabbitMQ, AMQP имеет отличную кроссплатформенную поддержку).Кроме того, это может быть проблемой безопасности, чтобы выставить его напрямую.
...