{"id":13487642,"url":"https://github.com/Wizzercn/MqttWk","last_synced_at":"2025-03-27T22:31:56.250Z","repository":{"id":38422045,"uuid":"132579155","full_name":"Wizzercn/MqttWk","owner":"Wizzercn","description":"Java + Netty 实现的高并发高可用MQTT服务broker，轻松支持10万并发(有群友实现了130万在线)","archived":false,"fork":false,"pushed_at":"2023-09-05T21:57:52.000Z","size":646,"stargazers_count":635,"open_issues_count":6,"forks_count":229,"subscribers_count":22,"default_branch":"netty","last_synced_at":"2024-10-12T07:42:00.912Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Wizzercn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-05-08T08:34:22.000Z","updated_at":"2024-09-27T09:02:56.000Z","dependencies_parsed_at":"2024-01-16T09:01:30.679Z","dependency_job_id":"364da69f-7b46-4d04-a8d9-de10b2084dfb","html_url":"https://github.com/Wizzercn/MqttWk","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wizzercn%2FMqttWk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wizzercn%2FMqttWk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wizzercn%2FMqttWk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wizzercn%2FMqttWk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Wizzercn","download_url":"https://codeload.github.com/Wizzercn/MqttWk/tar.gz/refs/heads/netty","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222322034,"owners_count":16966433,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T18:01:01.513Z","updated_at":"2025-03-27T22:31:56.225Z","avatar_url":"https://github.com/Wizzercn.png","language":"Java","funding_links":[],"categories":["Java"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n    \u003cbr/\u003e\n    \u003ch1\u003eMqttWk - by netty\u003c/h1\u003e\n\n[![GitHub release](https://img.shields.io/github/release/Wizzercn/MqttWk.svg)](https://github.com/Wizzercn/MqttWk/releases)\n[![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)\n[![PowerByNutz](https://img.shields.io/badge/PowerBy-NutzBoot-green.svg)](https://github.com/nutzam/nutzboot)\n\u003c/div\u003e\n\n中文 | [English](README_EN.md)\n\n\u003e 本项目开源免费，欢迎交流学习、贡献代码。\n\n#### MqttWk\n* QQ群号：225991747\n\n# 开发指南\n\n#### 技术体系\n\n1. 使用 netty 实现通信及协议解析\n2. 使用 nutzboot 提供依赖注入及属性配置\n3. 使用 redis 实现消息缓存,集群\n4. 使用 kafka 实现消息转发(可选)\n\n#### 项目结构\n```\nMqttWk\n  ├── mqtt-auth -- MQTT服务连接时用户名和密码认证\n  ├── mqtt-broker -- MQTT服务器功能的核心实现\n  ├── mqtt-common -- 公共类及其他模块使用的服务接口及对象\n  ├── mqtt-store -- MQTT服务器会话信息(redis缓存及kafka加载)\n  ├── mqtt-client -- MQTT客户端示例代码(配置文件修改数据库连接启动之)\n  ├── mqtt-zoo -- 教程文档或文件\n    ├── mqtt-test-kafka -- kafka消费者接收消息\n    ├── mqtt-test-websocket -- websocket通信测试示例\n```\n\n#### 功能说明\n1. 参考MQTT3.1.1规范实现\n2. 完整的QoS服务质量等级实现\n3. 遗嘱消息, 保留消息及消息分发重试\n4. 心跳机制\n5. MQTT连接认证(可选择是否开启)\n6. SSL方式连接(可选择是否开启)\n7. 主题过滤(支持单主题订阅如 `test_topic`  `/mqtt/test` --不能以/结尾, 通配符订阅 `#` `/mqtt/#` --以#结尾)\n8. Websocket支持(可选择是否开启)\n9. 集群功能(可选择是否开启)\n10. Kafka消息转发功能(可选择是否开启)\n11. 启动后查看统计数据 `http://127.0.0.1:8922/open/api/mqttwk/info`\n\n#### 快速开始\n- JDK1.8\n- 项目根目录执行  `mvn install` \n- mqtt-broker 下执行 `mvn clean package nutzboot:shade` 进行打包\n- 运行并加载jar内部yaml配置文件 `java -jar mqtt-broker-xxx.jar -Dnutz.profiles.active=prod` [此时加载application-prod.yaml配置文件]\n- 部署并加载指定文件夹下yaml配置文件 `nohup java -Dnutz.boot.configure.yaml.dir=/data -jar mqtt-broker-xxx.jar \u003e/dev/null 2\u003e\u00261 \u0026 `\n- 打开mqtt-spy客户端, 填写相应配置[下载](https://github.com/eclipse/paho.mqtt-spy/wiki/Downloads)\n- 连接端口: 8885, websocket 端口: 9995 websocket\n- 连接使用的用户名: demo\n- 连接使用的密码: 8F3B8DE2FDC8BD3D792BE77EAC412010971765E5BDD6C499ADCEE840CE441BDEF17E30684BD95CA708F55022222CC6161D0D23C2DFCB12F8AC998F59E7213393\n- 连接使用的证书在 `mqtt-zoo`\\keystore\\server.cer\n\n#### 集群使用\n- 多机环境集群:\n\n```yaml\nmqttwk:\n  broker:\n    cluster-on: true\n    kafka:\n      # 是否启用kafka消息转发\n      broker-enabled: false\n      bootstrap:\n        servers: 192.168.1.101:9092,192.168.1.102:9093\nredis:\n  mode: cluster\n  nodes: 192.168.1.103:16379,192.168.1.104:26379,192.168.1.103:36379\n```\n- 单机环境集群: \n\n```yaml\nmqttwk:\n  broker:\n    cluster-on: true\n    kafka:\n      # 是否启用kafka消息转发\n      broker-enabled: false\n      bootstrap:\n        servers: 192.168.1.101:9092,192.168.1.102:9093\nredis:\n  mode: normal\n  host: 127.0.0.1\n  port: 6379\n```\n\n#### 自定义 - 连接认证\n- 默认只是简单使用对用户名进行RSA密钥对加密生成密码, 连接认证时对密码进行解密和相应用户名进行匹配认证\n- 使用中如果需要实现连接数据库或其他方式进行连接认证, 只需要重写`mqtt-auth`模块下的相应方法即可\n\n#### 自定义 - 服务端证书\n- 服务端证书存储在`mqtt-broker`的`resources/keystore/server.pfx`\n- 用户可以制作自己的证书, 但存储位置和文件名必须使用上述描述的位置及文件名\n\n#### 生产环境部署\n- 多机环境集群\n- 负载均衡: 富人用 L4 Switch,穷人用 Linux HAProxy\n\n#### 示例截图\n![示例截图](mqtt-zoo/test.png)\n\n\n# 参考项目\n\n* [https://github.com/netty/netty](https://github.com/netty/netty)\n* [https://gitee.com/recallcode/iot-mqtt-server](https://gitee.com/recallcode/iot-mqtt-server)\n\n\u003e 如果您觉得还不错请在右上角点一下 star，帮忙转发，谢谢 ��🙏🙏 大家的支持是开源最大动力\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FWizzercn%2FMqttWk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FWizzercn%2FMqttWk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FWizzercn%2FMqttWk/lists"}