2017-02-04 6 views
2

Я создаю услугу (доступную через Интернет и приложение), где пользователи принадлежат к команде. Всякий раз, когда пользователь делает что-то, все остальные пользователи онлайн (*) в своей команде должны быть уведомлены. Для этого я оцениваю RabbitMQ.RabbitMQ - как избежать получения собственных сообщений

(*) Обратите внимание: возможно, что один и тот же пользователь имеет несколько сеансов одновременно: он может одновременно регистрироваться в разных браузерах или, скорее всего, в браузере и приложении одновременно ,

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

  • Когда пользователь входит в систему, в Автоудален очереди создается и связанный с обменом его/ее команда.
  • Когда пользователь сделал обновление, бэкэнд отправляет сообщение на обмен соответствующей командой.
  • Наконец, все активные очереди, то есть все активные сеансы, получают сообщение об обновлении.

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

Конечно, я всегда могу добавить идентификатор пользователя инициатора в полезной нагрузке сообщения об обновлении и фильтровать это поле при получении сообщения об обновлении, но сообщение все равно будет получено.

ответ

1

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

С помощью темы в качестве Exchange вы всегда получите уведомление, когда очередь создается при входе в систему. И Тема будет транслировать его.

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

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

  1. Создать одну тему Обмен на человека в команде.
  2. Когда другой пользователь регистрируется, он будет подписаться на Exchange всех других членов команды.
  3. Когда пользователь делает обновление, он отправляется на его собственный Exchange, где все остальные слушают.
  4. Таким образом, пользователь не получит свое собственное обновление, поскольку он слушает другие темы.
+0

Умный подход! –

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

  • Нет связанных вопросов^_^