1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/markhsiu-MiniMQ

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

MiniMQ

В настоящее время проект находится на начальной стадии разработки. Это продолжение моего изучения netty. В процессе написания этого проекта я обнаружил интересный и забавный коммуникационный фреймворк talent-aio. Он очень быстрый, простой в использовании, исходный код заслуживает внимания. Возможно, после доработки он сможет заменить netty. Важно то, что он написан китайским разработчиком, и его необходимо поддерживать.

Недавно я ознакомился с новым руководством по разработке на Java от Alibaba «Руководство по разработке на Java от компании Alibaba», которое показалось мне хорошим и может быть использовано в качестве стандарта кодирования для проекта.

При проектировании я также руководствовался принципами, изложенными в статье «Принципы проектирования архитектуры» от автора dubbo Лян Фэя.

Первый этап включает изучение некоторых существующих колёс MQ и рассмотрение простых идей дизайна MQ, заимствуя хорошие структуры из различных источников:

>>> https://github.com/tang-jie/AvatarMQ.git
Автор имеет специальный раздел в своём блоге на Baidu, где подробно объясняет свой опыт создания других продуктов MQ. Код не только для просмотра, но и для написания.
>>> https://github.com/uncodecn/uncode-mq.git
У автора есть блог на oschina. Автор разработал довольно полный проект, но не уделил должного внимания производительности, например, часть сериализации всё ещё использует IO JDK.
>>> https://git.oschina.net/xuxueli0323/xxl-mq
У автора есть блог.
>>> https://git.oschina.net/blackbeans/kiteq
Версия на языке Go.
>>> https://git.oschina.net/itteam/sf-mq
Оказалось сложным проектом, неудивительно, что дизайн выглядит таким сложным, это версия 3.x от MQ Alibaba.
>>> https://git.oschina.net/rushmore/zbus
Довольно активный и надёжный вариант реализации MQ вне основного потока.
>>> https://github.com/adyliu/jafka
Клонированная версия Kafka, реализованная на Java вместо Scala.
>>> https://github.com/fusesource/mqtt-client
Используется как пример эффективного клиентского соединения.
>>> https://github.com/killme2008/Metamorphosis/
Ранняя версия rocketmq, Meta. Любая хорошая структура начинается с простоты и развивается со временем, понимание эволюции ранних проектов может помочь лучше понять их развитие.

Второй этап предполагает чтение и изучение основных Java-фреймворков MQ, таких как RocketMQ, ActiveMQ. RocketMQ от Alibaba будет основным направлением, также будет рассмотрен Kafka (Scala), RabbitMQ (Erlang), ZeroMQ (C/C++).

>>> https://github.com/apache/incubator-rocketmq
>>> https://github.com/apache/activemq

На третьем этапе планируется переписать некоторые зависимости текущего проекта в качестве следующего шага обучения.

Модульное разделение

  • Broker — это просто сервер очереди сообщений.
    • factory — управление потребителями и т. д.
    • server — предоставление клиентских подключений.
    • task — отправка сообщений.
    • store — управление хранением сообщений.
    • topic — ключевое слово маршрутизации (Routing Key).
  • core — набор инструментов и константы конфигурации.
  • Message — объект сообщения, используемый для передачи информации между клиентом и сервером.
  • client — подключение к серверу.
    • Producer — отправитель сообщений, в основном используется для отправки сообщений потребителям.
    • Consumer — получатель сообщений, используется для получения сообщений от производителей. Основная функция — контролировать соответствие между отправкой и получением сообщений производителями и потребителями.
  • Channel — канал сообщений. Каждый клиент может создать несколько каналов, каждый канал представляет собой сеанс задачи.
  • Serialize — интерфейс и реализация сериализации.

Структура данных Zookeeper

  • После запуска брокер регистрируется в Zookeeper и уведомляет потребителей и производителей об обновлении информации о брокере.
  • Потребитель запускается и пытается подключиться к брокеру, содержащему тему.
  • Производитель запускается, получает всю информацию о брокере и отправляет сообщения брокеру.
  • Брокер ожидает отправки сообщений производителем, регистрирует принимаемую тему в соответствующем brokerID и уведомляет потребителя об обновлении информации о брокере.
/minimq/broker/${brokerID}(ip:port)/${topic}

Инструменты разработки

  • Eclipse 4.5+, IDEA также подходит.
  • Maven 3.x.
  • Git.
  • JDK 1.8+.

Принципы кодирования

  • Предпочтение использования одноэлементных объектов, классы не должны иметь свойств, которые могут хранить данные (за исключением объектов передачи данных).
  • Рекомендуется использовать ConcurrentHashMap для хранения данных в памяти и оценивать размер контейнера.
  • Программирование, ориентированное на интерфейсы, модули сериализации, связи и другие модули реализуют вызовы интерфейсов через внедрение.
  • Не следует использовать System.out для вывода журналов, используйте log4j и строго контролируйте уровень данных журнала, предпочтительно использовать асинхронную обработку XML-конфигурации, чтобы избежать значительного влияния на производительность.

Задачи

  • Протобуферы по умолчанию используются для сериализации, поддерживается Java-сериализация.
  • Netty используется в качестве коммуникационного метода по умолчанию, расширяя коммуникационный метод talent-aio.
  • Используется spring в качестве управления bean-компонентами и расширения функций, следуя примеру dubbo.
  • Варианты хранения включают MySQL, Redis или диск.
  • Управление кластером осуществляется с помощью Zookeeper.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/markhsiu-MiniMQ.git
git@api.gitlife.ru:oschina-mirror/markhsiu-MiniMQ.git
oschina-mirror
markhsiu-MiniMQ
markhsiu-MiniMQ
master