Джо-mqtt-сервер
Лёгкий сервер для интернета вещей, работающий по протоколу MQTT. Быстро развёртывается и поддерживает кластеризацию.
Построен на основе Java 8, Netty, Spring Boot, Redis и Hazelcast.
Не поддерживаются темы:
* пустые;
* начинающиеся или заканчивающиеся на '/';
* «joRootTopic»;
* содержащие только разделители, например, ab///c;
* содержащие запрещённые символы, например, ab/+11 или c/12#1.
jo-mqtt
├── mqtt-broker — основная реализация функций MQTT-сервера;
├── mqtt-springboot — интеграция Springboot с MQTT;
└── mqtt-test — тестовые примеры для MQTT-сервера.
- Реализация в соответствии со спецификацией MQTT 3.1.1.
- Полная поддержка уровней качества обслуживания (QoS).
- Поддержка сообщений о состоянии, сохранённых сообщений и повторной отправки сообщений.
- Механизм сердцебиения.
- Кластеризация.
Используется фреймворк Logback.
По умолчанию используется RedisExtendProvider для обмена данными между узлами. Обмен данными зависит от механизма pub/sub в Redis.
#server config
#tcp порт
#-1 означает, что порт не используется
mqtt.serverConfig.tcpPort=1883
#-1 означает, что порт не используется
mqtt.serverConfig.tcpSslPort=1888
#webSocket конфигурация
mqtt.serverConfig.webSocketPath=/joMqtt
#-1 означает, что порт не используется
mqtt.serverConfig.webSocketPort=2883
#-1 означает, что порт не используется
mqtt.serverConfig.webSocketSslPort=2888
mqtt.serverConfig.enableClientCA=false
mqtt.serverConfig.hostname=
#provider конфигурация, по умолчанию доступны следующие три реализации
#не поддерживает обмен данными между кластерами, не поддерживает сохранение сообщений
mqtt.serverConfig.extendProviderClass=joey.mqtt.broker.provider.MemoryExtendProvider
#поддерживает обмен данными между кластерами, поддерживает сохранение сообщений
#mqtt.serverConfig.extendProviderClass=joey.mqtt.broker.provider.RedisExtendProvider
#hazelcastProvider конфигурация, поддерживает обмен данными между кластерами, не поддерживает сохранение сообщений
#mqtt.serverConfig.extendProviderClass=joey.mqtt.broker.provider.HazelcastExtendProvider
#mqtt.customConfig.hazelcastConfigFile=classpath:hazelcast/hazelcast-local.xml
#mqtt.customConfig.hazelcastConfigFile=file:/home/hazelcast-local.xml
#пароль, используется шифрование sha256hex, пример содержит пароль в виде открытого текста и имя пользователя
mqtt.serverConfig.enableUserAuth=true
mqtt.serverConfig.authUsers[0].userName=local
mqtt.serverConfig.authUsers[0].password=25bf8e1a2393f1108d37029b3df5593236c755742ec93465bbafa9b290bddcf6
mqtt.serverConfig.authUsers[1].userName=admin
mqtt.serverConfig.authUsers[1].password=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
#netty конфигурация
mqtt.nettyConfig.bossThreads=0
mqtt.nettyConfig.workerThreads=0
mqtt.nettyConfig.epoll=false
mqtt.nettyConfig.soBacklog=1024
mqtt.nettyConfig.soReuseAddress=true
mqtt.nettyConfig.tcpNoDelay=true
mqtt.nettyConfig.soSndBuf=65536
mqtt.nettyConfig.soRcvBuf=65536
mqtt.nettyConfig.soKeepAlive=true
mqtt.nettyConfig.channelTimeoutSeconds=200
#если используется RedisExtendProvider, необходимо настроить redisConfig
mqtt.customConfig.redisConfig.host=localhost
mqtt.customConfig.redisConfig.password=
mqtt.customConfig.redisConfig.port=6379
mqtt.customConfig.redisConfig.database=0
mqtt.customConfig.redisConfig.timeout=3000
mqtt.customConfig.redisConfig.pool.maxActive=50
mqtt.customConfig.redisConfig.pool.maxWait=1000
mqtt.customConfig.redisConfig.pool.maxIdle=50
mqtt.customConfig.redisConfig.pool.minIdle=20
#если включено ssl, необходимо настроить следующую информацию
mqtt.customConfig.sslContextConfig.sslKeyFilePath=ssl/jomqtt-server.pfx
mqtt.customConfig.sslContextConfig.sslKeyStoreType=PKCS12
mqtt.customConfig.sslContextConfig.sslManagerPwd=jo_mqtt
mqtt.customConfig.sslContextConfig.sslStorePwd=jo_mqtt
#настраиваемое имя узла, можно не настраивать, по умолчанию это UUID
#mqtt.customConfig.nodeName=jo_mqtt_1
#пользовательская конфигурация расширения
mqtt.customConfig.extConfig.k1=v1
mqtt.customConfig.extConfig.k2=v2
mqtt.customConfig.extConfig.k3.k31=v31
mqtt.customConfig.extConfig.k3.k32=v32
Если текущая функциональность не удовлетворяет требованиям пользователя, можно расширить её самостоятельно. Для этого нужно унаследовать класс MemoryExtendProvider и переопределить соответствующие методы. Также можно добавлять собственные переменные, используя пример конфигурации: пользовательская настройка расширения. Чтобы изменить конфигурацию, используйте mqtt.serverConfig.extendProviderClass=joey.mqtt.broker.provider.XXXXProvider. 1. initMessageIdStore(); 2. Получение реализации хранилища сессий: ISessionStore initSessionStore(). 3. Получение реализации подписки на темы: ISubscriptionStore initSubscriptionStore(ISessionStore sessionStore). 4. Получение реализации хранения сообщений retain: IRetainMessageStore initRetainMessageStore(). 5. Получение реализации дублирования сообщений pub: IDupPubMessageStore initDupPubMessageStore(). 6. Получение реализации дублирования сообщений pubRel: IDupPubRelMessageStore initDupPubRelMessageStore(). 7. Получение реализации управления авторизацией: IAuth initAuthManager(List userList). 8. Получение реализации внутренней коммуникации кластера: IInnerTraffic initInnerTraffic(InnerPublishEventProcessor innerPublishEventProcessor). 9. Получение списка слушателей событий: List initEventListeners(). 10. Получение имени текущего узла экземпляра: String getNodeName(). 11. Инициализация sslContext: SslContext initSslContext(boolean enableClientCA) throws Exception.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )