2009-09-26 2 views
0

I''m в настоящее время вертело с приложением, которое имеет установку, соответствующую следующую аналогию: чатJBoss Seam - Массивные сообщения в Заявке

  • чат является объектом, который хранится в памяти и содержит список чат сообщения
  • чат отображается в нескольких окнах браузера и обновления тянули с использованием a4j: нажмите

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

я могу думать о трех способов достижения этой цели:

  1. событий Seam с чатом ID в качестве параметра, а затем каждый компонент проверяет ID и либо обновление или игнорирует сообщение
  2. JMS Очередь или один JMS тема, где каждый компонент listenes на с фильтром для всего это чат
  3. чистый механизм Java слушателя в общем объекте чата, то есть каждый шов компонент регистрирует к нему и уведомлению чистому и прямому Java

Для аргументации предположим, что количество чатов велико (десятки тысяч), а количество пользователей чатов невелико (скажем, 2-10).

Какова эффективность каждого шкалы? Есть ли у вас какие-либо другие предложения, как сделать это с помощью Seam и хорошо работать?

Как я вижу, (1) будет интегрирован и чист, но в конечном итоге вы будете уведомлять десятки тысяч компонентов, где только немногие действительно нуждаются в этом. Поэтому он, вероятно, не будет масштабироваться.

(2) будет интегрирован и зависит только от производительности JMS-провайдера (который может быть обменен), а также будет работать в кластерной среде без изменений. Я не уверен в производительности JMS здесь, то есть несколько сотен сообщений в секунду и тысячи слушателей с разными фильтрами много или нет?

(3) был бы быстрым, так как только необходимые компоненты были бы уведомлены, а уведомление является чистым и прямым java. Тем не менее, проблемы параллелизма/доступа могут возникать из-за того, что выполняется нечто пересечение сессии/компонента/потока.

Для (1) и (3) решение, которое поддерживает кластеризацию, должно быть добавлено вручную, если потребуется в какой-то момент.

ответ

1

Я бы рекомендовал 2). Я бы также рекомендовал вырезать JMS из уравнения - даже если он позволит вам переключать поставщиков сообщений, он также предотвратит использование более продвинутых функций вашей системы обмена сообщениями. Если вы используете базу данных Oracle, то AQ сделает разумный выбор (он поддерживает JMS btw.). В противном случае я бы рекомендовал использовать AMQP, который должен быть доступен через JBoss Messaging или стороннее решение, например RabbitMQ.

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

Смежные вопросы