MessageManager <-> Broker <-> SubscriberManager
MessageManager отвечает за взаимодейтсвие с сообщениями. Реализация хранит потокобезопасную структуру со списком сообщений для каждого пользователся. Плюс дублирует все в бд. Синхронизируется при добавлении сообщений для поддержания порядка. Функционал:
- getMessageCount - получить количество сообщений в топике
- addMessage - добавить сообщение в топик
- getMessage - получить сообщение из топика по номеру добаления
SubscriberManager отвечает за привязку подписчиков к топикам. Данные - для каждого пользователя в каком топике какое сообщение прочитано читается. Хранит данные в оперативной памяти, дублируя на диски. Синхронизуется при получении сообщений для того чтобы не получать одно и тоже сообщение дважды. Функционал:
- addTopic - подписывает на топик
- getNewMessage - возвращает не прочитанное сообщение, если такое есть или Optional.empty, если нет.
Взаимодействие мэнеджеров происходит через Broker. Создается объект Broker, ему в конструктор передается путь к папке в которой будет бд.
- subscribe - подписывает на топик (берет последнее сообщение в топике и записывает как прочитанное).
- publish - добавляет сообщение в топик
- fetch - если есть сообщение, возвращает его, иначе empty
gradle проект, gradle jar соберет jar
Вопросы:
-
SubscribeManager и MessageManager создают интерфейсы. Можно создать ноды и разделить между ними сообщения относящиеся к разным топикам. То же самое можно сделать с подписчиками. А главная нода через менеджеры будет это все координировать.
-
Поднять вэб сервер. Сделать вэб API и транслировать запросы к серверу в запросы к Broker.
-
Реплицировать данные в вопросе 1.