Skip to content

nizshee/message-broker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

message-broker

MessageManager <-> Broker <-> SubscriberManager

MessageManager отвечает за взаимодейтсвие с сообщениями. Реализация хранит потокобезопасную структуру со списком сообщений для каждого пользователся. Плюс дублирует все в бд. Синхронизируется при добавлении сообщений для поддержания порядка. Функционал:

  • getMessageCount - получить количество сообщений в топике
  • addMessage - добавить сообщение в топик
  • getMessage - получить сообщение из топика по номеру добаления

SubscriberManager отвечает за привязку подписчиков к топикам. Данные - для каждого пользователя в каком топике какое сообщение прочитано читается. Хранит данные в оперативной памяти, дублируя на диски. Синхронизуется при получении сообщений для того чтобы не получать одно и тоже сообщение дважды. Функционал:

  • addTopic - подписывает на топик
  • getNewMessage - возвращает не прочитанное сообщение, если такое есть или Optional.empty, если нет.

Взаимодействие мэнеджеров происходит через Broker. Создается объект Broker, ему в конструктор передается путь к папке в которой будет бд.

  • subscribe - подписывает на топик (берет последнее сообщение в топике и записывает как прочитанное).
  • publish - добавляет сообщение в топик
  • fetch - если есть сообщение, возвращает его, иначе empty

gradle проект, gradle jar соберет jar

Вопросы:

  1. SubscribeManager и MessageManager создают интерфейсы. Можно создать ноды и разделить между ними сообщения относящиеся к разным топикам. То же самое можно сделать с подписчиками. А главная нода через менеджеры будет это все координировать.

  2. Поднять вэб сервер. Сделать вэб API и транслировать запросы к серверу в запросы к Broker.

  3. Реплицировать данные в вопросе 1.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages