2009-09-23 3 views
0

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

Кто-нибудь знает какие-либо установленные шаблоны проектирования, покрывающие такие сценарии?

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

Пользователь редактирует UI -> запись редактируется на дб -> сообщение добавляется в очередь -> других клиентов обновление

Моей единственной проблема с этим рабочим процессом что пользовательский интерфейс, который отредактировал запись, также будет прослушивать сообщение и, вероятно, без какого-либо взлома, а затем излишне обновлять себя. Ничего плохого в этом в принципе, но мой опыт с графическими интерфейсами GUI (который, как я полагаю, будет похож на шаблоны обмена сообщениями), такими как Passive View от Martin Fowlers, дает мне ощущение, что такой подход не может быть лучшим способом.

ответ

1

Образец наблюдения может показаться наиболее подходящим для вашей проблемы. Иногда книга GoF по-прежнему хороша. :)

http://en.wikipedia.org/wiki/Observer_pattern

+0

Система обмена сообщениями - это один большой шаблон наблюдателя, содержащий издателей и подписчиков. Я больше искал шаблоны, которые будут работать вместе с системой обмена сообщениями. – ChrisInCambo

+0

Итак, вы ищете шаблон для клиентской или серверной стороны? Если серверная сторона, то не отправляйте обновления клиенту, который отправил информацию, если это будет проблемой. –

2

Одно решение (которое принесет пользу вам другими способами, например, регистрация/аудит) должен включать идентификатор клиента (PID + имя хоста?) В записи, то клиенты прослушивания широковещательных сообщений может легко отфильтровать сообщения, чье поле «обновлено по клиенту» соответствует их собственному идентификатору.

Это может быть или не быть образцом (если это так, я был бы признателен за добавление комментария/редактирования с именем), но он действительно решает вашу проблему.

+0

Это похоже на разумный подход. – ChrisInCambo

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