# koala-mqtt **Repository Path**: javakoala/koala-mqtt ## Basic Information - **Project Name**: koala-mqtt - **Description**: MQTT Broker - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 8 - **Forks**: 1 - **Created**: 2021-04-23 - **Last Updated**: 2023-04-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## Koala-MQTT ### 功能清单 * 支持MQTT3.1.1协议 * 支持QoS0、QoS1、QoS2服务质量体系 * 支持遗嘱信息 * 支持Retain保留消息 * 支持Dup消息重发 * 支持Redis集群作为底层存储 * 支持容器化部署 * 支持TCP、WS、SSL、WSS * 支持基于内存启动 ### 环境依赖 * JDK1.8 * Mave3 * Redis ### 如何使用 #### 一、获取并编译项目源码 > ```shell > $ git clone ${repository} > $ cd ${proj folder} > $ mvn clean compile > ``` #### 二、打包为容器发布 * 确保你的机器上安装了docker环境 * 执行命令 ```shell $ cd ${proj folder}/build $ ./docker_build.sh # windows(docker_build.bat) $ docker images ``` * 通过docker-compose启动 Redis集群环境 ```yaml version: '2' services: koala-mqtt: container_name: koala-mqtt image: koala/koala-mqtt:${change me} ports: - "3310:3310" environment: - _JAVA_OPTIONS=-Xmx2048m -Xms2048m - BROKER_PORT=3310 - SELF_CHECK=false - REDIS_NODES=192.168.11.204:6380,192.168.11.204:6381,192.168.11.204:6382,192.168.11.204:6383,192.168.11.204:6384,192.168.11.204:6385 - REDIS_PASSWORD=Kunfei@1405# ``` ​ Redis单机环境 ```yaml version: '2' services: koala-mqtt: container_name: koala-mqtt image: koala/koala-mqtt:${change me} ports: - "3310:3310" environment: - _JAVA_OPTIONS=-Xmx2048m -Xms2048m - SERVICE_ID=mqtt-koala-01 - BROKER_PORT=3310 - SELF_CHECK=false - REDIS_HOST=192.168.11.204:6380 - REDIS_PASSWORD=Kunfei@1405# ``` #### 三、环境变量 | 名称 | 描述 | 是否必填 | 默认值 | | --------------- | ------------------------- | -------- | ------------- | | REDIS_HOST | Redis地址(单结点) | false | localhost | | REDIS_PORT | Redis端口(单节点) | false | 6379 | | REDIS_PASSWORD | Redis密码 | false | | | REDIS_DATABSE | Redis数据库 | false | | | REDIS_TIMEOUT | Redis超时配置 | false | | | REDIS_NODES | Redis节点(集群) | false | | | REDIS_REDIRECTS | Redis跳数(集群) | false | | | BROKER_PORT | Broker监听端口 | true | 3310 | | SELF_CHECK | Broker启动时执行测试用例 | true | false | | SERVICE_ID | 服务id,集群模式下必须唯一 | true | mqtt-koala-01 | ### 如何集成 * 安装 ```shell $ cd ${proj folder} $ mvn clean install ``` * 引入 ```xml org.koala mqtt-starter ${change me} ``` * 注册监听 ```java package com.kunfei.mqtt.forward.kafka; import lombok.extern.slf4j.Slf4j; import org.koala.mqtt.common.event.PublishMessageToTopicEvent; import org.koala.mqtt.external.hooks.HookMqtt; import org.koala.mqtt.external.hooks.ICallbackIMqtt; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.stereotype.Component; import org.springframework.util.concurrent.ListenableFutureCallback; import java.io.UnsupportedEncodingException; @Slf4j @Component public class MqttMessageHandler implements ICallbackIMqtt, InitializingBean { @Autowired private HookMqtt hookMqtt; @Autowired private ApplicationContext applicationContext; @Override public void invoke(PublishMessageToTopicEvent event) { } @Override public void afterPropertiesSet() { hookMqtt.registerCallback(applicationContext.getBean(this.getClass())); } } ``` * 启动项目 ```java package com.kunfei.mqtt.forward.starter; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScans; @ComponentScans({ @ComponentScan("com.kunfei.mqtt.forward") }) @SpringBootApplication public class AppStarter { public static void main(String[] args) { SpringApplication.run(AppStarter.class, args); } } ``` #### 初始化 Redis - 初始化账号密码 HSET mqtt:auth:info admin "{'username':'admin','password':'admin'}"