├── .gitignore ├── docs └── docker │ ├── docker安装.md │ ├── emqee │ ├── etc │ │ ├── acl.conf │ │ ├── certs │ │ │ ├── README │ │ │ ├── cacert.pem │ │ │ ├── cert.pem │ │ │ ├── client-cert.pem │ │ │ ├── client-key.pem │ │ │ └── key.pem │ │ ├── cluster.conf │ │ ├── emqx.conf │ │ ├── emqx.lic │ │ ├── listeners.conf │ │ ├── logger.conf │ │ ├── lwm2m_xml │ │ │ ├── LWM2M_Access_Control-v1_0_1.xml │ │ │ ├── LWM2M_Connectivity_Statistics-v1_0_1.xml │ │ │ ├── LWM2M_Device-v1_0_1.xml │ │ │ ├── LWM2M_Firmware_Update-v1_0_1.xml │ │ │ ├── LWM2M_Location-v1_0.xml │ │ │ ├── LWM2M_Security-v1_0.xml │ │ │ └── LWM2M_Server-v1_0.xml │ │ ├── plugins │ │ │ ├── acl.conf.paho │ │ │ ├── ekka.conf.example │ │ │ ├── ekka.config.example │ │ │ ├── emqx_auth_http.conf │ │ │ ├── emqx_auth_jwt.conf │ │ │ ├── emqx_auth_ldap.conf │ │ │ ├── emqx_auth_mnesia.conf │ │ │ ├── emqx_auth_mongo.conf │ │ │ ├── emqx_auth_mysql.conf │ │ │ ├── emqx_auth_pgsql.conf │ │ │ ├── emqx_auth_redis.conf │ │ │ ├── emqx_backend_cassa.conf │ │ │ ├── emqx_backend_dynamo.conf │ │ │ ├── emqx_backend_influxdb.conf │ │ │ ├── emqx_backend_mongo.conf │ │ │ ├── emqx_backend_mysql.conf │ │ │ ├── emqx_backend_opentsdb.conf │ │ │ ├── emqx_backend_pgsql.conf │ │ │ ├── emqx_backend_redis.conf │ │ │ ├── emqx_backend_timescale.conf │ │ │ ├── emqx_bridge_kafka.conf │ │ │ ├── emqx_bridge_mqtt.conf │ │ │ ├── emqx_bridge_pulsar.conf │ │ │ ├── emqx_bridge_rabbit.conf │ │ │ ├── emqx_bridge_rocket.conf │ │ │ ├── emqx_coap.conf │ │ │ ├── emqx_conf.conf │ │ │ ├── emqx_dashboard.conf │ │ │ ├── emqx_exhook.conf │ │ │ ├── emqx_exproto.conf │ │ │ ├── emqx_jt808.conf │ │ │ ├── emqx_lua_hook.conf │ │ │ ├── emqx_lwm2m.conf │ │ │ ├── emqx_management.conf │ │ │ ├── emqx_modules.conf │ │ │ ├── emqx_prometheus.conf │ │ │ ├── emqx_psk_file.conf │ │ │ ├── emqx_recon.conf │ │ │ ├── emqx_reloader.conf │ │ │ ├── emqx_retainer.conf │ │ │ ├── emqx_rule_engine.conf │ │ │ ├── emqx_sasl.conf │ │ │ ├── emqx_schema_registry.conf │ │ │ ├── emqx_sn.conf │ │ │ ├── emqx_stomp.conf │ │ │ ├── emqx_tcp.conf │ │ │ └── emqx_web_hook.conf │ │ ├── psk.txt │ │ ├── rpc.conf │ │ ├── ssl_dist.conf │ │ ├── sys_mon.conf │ │ ├── vm.args │ │ └── zones.conf │ ├── license │ │ ├── ReadMe.txt │ │ ├── emqx.key │ │ └── emqx.lic │ ├── log │ │ ├── emqx.log.1 │ │ ├── emqx.log.idx │ │ ├── emqx.log.siz │ │ ├── erlang.log.1 │ │ └── run_erl.log │ ├── read.md │ └── start.sh │ ├── emqx │ ├── css │ │ └── app.1495f134b9420661c25a03fc6be1c155.css │ ├── data │ │ └── loaded_plugins │ ├── etc │ │ ├── acl.conf │ │ ├── certs │ │ │ ├── README │ │ │ ├── cacert.pem │ │ │ ├── cert.pem │ │ │ ├── client-cert.pem │ │ │ ├── client-key.pem │ │ │ └── key.pem │ │ ├── emqx.conf │ │ ├── lwm2m_xml │ │ │ ├── LWM2M_Access_Control-v1_0_1.xml │ │ │ ├── LWM2M_Connectivity_Statistics-v1_0_1.xml │ │ │ ├── LWM2M_Device-v1_0_1.xml │ │ │ ├── LWM2M_Firmware_Update-v1_0_1.xml │ │ │ ├── LWM2M_Location-v1_0.xml │ │ │ ├── LWM2M_Security-v1_0.xml │ │ │ └── LWM2M_Server-v1_0.xml │ │ ├── plugins │ │ │ ├── acl.conf.paho │ │ │ ├── ekka.conf.example │ │ │ ├── ekka.config.example │ │ │ ├── emqx_auth_clientid.conf │ │ │ ├── emqx_auth_http.conf │ │ │ ├── emqx_auth_jwt.conf │ │ │ ├── emqx_auth_ldap.conf │ │ │ ├── emqx_auth_mnesia.conf │ │ │ ├── emqx_auth_mongo.conf │ │ │ ├── emqx_auth_mysql.conf │ │ │ ├── emqx_auth_pgsql.conf │ │ │ ├── emqx_auth_redis.conf │ │ │ ├── emqx_auth_username.conf │ │ │ ├── emqx_bridge_mqtt.conf │ │ │ ├── emqx_coap.conf │ │ │ ├── emqx_dashboard.conf │ │ │ ├── emqx_exproto.conf │ │ │ ├── emqx_extension_hook.conf │ │ │ ├── emqx_lua_hook.conf │ │ │ ├── emqx_lwm2m.conf │ │ │ ├── emqx_management.conf │ │ │ ├── emqx_plugin_template.config │ │ │ ├── emqx_prometheus.conf │ │ │ ├── emqx_psk_file.conf │ │ │ ├── emqx_recon.conf │ │ │ ├── emqx_reloader.conf │ │ │ ├── emqx_retainer.conf │ │ │ ├── emqx_rule_engine.conf │ │ │ ├── emqx_sasl.conf │ │ │ ├── emqx_sn.conf │ │ │ ├── emqx_stomp.conf │ │ │ ├── emqx_telemetry.conf │ │ │ └── emqx_web_hook.conf │ │ ├── psk.txt │ │ ├── ssl_dist.conf │ │ └── vm.args │ ├── log │ │ ├── emqx.log.1 │ │ ├── emqx.log.idx │ │ ├── emqx.log.siz │ │ ├── erlang.log.1 │ │ └── run_erl.log │ ├── read.md │ └── start.sh │ ├── gitlab │ ├── start.sh │ └── 指导.md │ ├── haproxy │ ├── conf │ │ └── haproxy.cfg │ └── start.sh │ ├── mongo │ ├── conf │ │ └── mongodb.conf │ ├── dockerFile-es.yaml │ ├── mongodb.md │ └── start.sh │ ├── mycat │ ├── conf │ │ ├── auto-sharding-long.txt │ │ ├── auto-sharding-rang-mod.txt │ │ ├── autopartition-long.txt │ │ ├── cacheservice.properties │ │ ├── ehcache.xml │ │ ├── index_to_charset.properties │ │ ├── log4j2.xml │ │ ├── migrateTables.properties │ │ ├── myid.properties │ │ ├── order-detail-id-node-partition.txt │ │ ├── order-detail-id-table-partition.txt │ │ ├── order-id-node-partition.txt │ │ ├── order-id-table-partition.txt │ │ ├── order-number-node-partition.txt │ │ ├── order-number-table-partition.txt │ │ ├── partition-hash-int.txt │ │ ├── partition-range-mod.txt │ │ ├── rule.xml │ │ ├── schema.xml │ │ ├── sequence_conf.properties │ │ ├── sequence_db_conf.properties │ │ ├── sequence_distributed_conf.properties │ │ ├── sequence_time_conf.properties │ │ ├── server.xml │ │ ├── sharding-by-enum.txt │ │ ├── task-partition.txt │ │ ├── user-partition.txt │ │ ├── wrapper.conf │ │ ├── zkconf │ │ │ ├── auto-sharding-long.txt │ │ │ ├── auto-sharding-rang-mod.txt │ │ │ ├── autopartition-long.txt │ │ │ ├── cacheservice.properties │ │ │ ├── ehcache.xml │ │ │ ├── index_to_charset.properties │ │ │ ├── partition-hash-int.txt │ │ │ ├── partition-range-mod.txt │ │ │ ├── rule.xml │ │ │ ├── schema.xml │ │ │ ├── sequence_conf.properties │ │ │ ├── sequence_db_conf.properties │ │ │ ├── sequence_distributed_conf-mycat_fz_01.properties │ │ │ ├── sequence_distributed_conf.properties │ │ │ ├── sequence_time_conf-mycat_fz_01.properties │ │ │ ├── sequence_time_conf.properties │ │ │ ├── server-mycat_fz_01.xml │ │ │ ├── server.xml │ │ │ └── sharding-by-enum.txt │ │ └── zkdownload │ │ │ └── auto-sharding-long.txt │ ├── read.md │ └── start.sh │ ├── mysql │ ├── conf │ │ └── my.cnf │ └── start.sh │ ├── nacos │ ├── init.d │ │ └── custom.properties │ └── start.sh │ ├── netdata │ └── start.sh │ ├── network.md │ ├── nginx │ ├── conf │ │ ├── conf.d │ │ │ ├── emq.conf │ │ │ ├── read.md │ │ │ └── ssl.conf │ │ ├── conf.h │ │ │ └── dashboard.conf │ │ ├── fastcgi_params │ │ ├── koi-utf │ │ ├── koi-win │ │ ├── mime.types │ │ ├── modules │ │ │ ├── ngx_http_geoip_module-debug.so │ │ │ ├── ngx_http_geoip_module.so │ │ │ ├── ngx_http_image_filter_module-debug.so │ │ │ ├── ngx_http_image_filter_module.so │ │ │ ├── ngx_http_js_module-debug.so │ │ │ ├── ngx_http_js_module.so │ │ │ ├── ngx_http_xslt_filter_module-debug.so │ │ │ ├── ngx_http_xslt_filter_module.so │ │ │ ├── ngx_stream_geoip_module-debug.so │ │ │ ├── ngx_stream_geoip_module.so │ │ │ ├── ngx_stream_js_module-debug.so │ │ │ └── ngx_stream_js_module.so │ │ ├── nginx.conf │ │ ├── scgi_params │ │ ├── uwsgi_params │ │ └── win-utf │ ├── html │ │ └── crossdomain.xml │ ├── ssl │ │ ├── ca-key.pem │ │ └── ca.pem │ ├── start.sh │ └── 执行前先阅读我.md │ ├── rabbitmq │ ├── conf │ │ └── rabbitmq.conf │ ├── read.md │ └── start.sh │ ├── redis │ ├── read.md │ ├── redis.conf │ └── start.sh │ ├── tdengine │ ├── conf │ │ └── taos.cfg │ ├── data │ │ ├── dnode │ │ │ ├── .running │ │ │ ├── dnodeCfg.json │ │ │ ├── dnodeEps.json │ │ │ └── mnodeEpSet.json │ │ ├── mnode │ │ │ └── wal │ │ │ │ └── wal0 │ │ └── vnode │ │ │ └── vnode2 │ │ │ ├── config.json │ │ │ ├── tsdb │ │ │ ├── config │ │ │ └── meta │ │ │ └── wal │ │ │ └── wal1 │ ├── logs │ │ └── taosdlog.0 │ ├── read.md │ └── start.sh │ └── zk │ ├── conf │ ├── configuration.xsl │ ├── log4j.properties │ ├── zoo.cfg │ └── zoo_sample.cfg │ ├── data │ ├── myid │ └── version-2 │ │ └── snapshot.0 │ ├── log │ └── zookeeper_audit.log │ └── start.sh ├── emqx-java-sdk ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── github │ └── emqx │ └── JavaSdk.java ├── iot-Share ├── pom.xml ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── github │ │ │ │ └── iot │ │ │ │ ├── IotApplication.java │ │ │ │ ├── annotation │ │ │ │ └── Topic.java │ │ │ │ ├── api │ │ │ │ ├── BannedApi.java │ │ │ │ ├── BaseApi.java │ │ │ │ ├── BrokerApi.java │ │ │ │ ├── ClientApi.java │ │ │ │ ├── NodesApi.java │ │ │ │ ├── PublishApi.java │ │ │ │ ├── ResourcesApi.java │ │ │ │ ├── RulesApi.java │ │ │ │ └── restentity │ │ │ │ │ ├── BaseResoult.java │ │ │ │ │ ├── banned │ │ │ │ │ ├── Gbanned.java │ │ │ │ │ ├── R.java │ │ │ │ │ ├── Result.java │ │ │ │ │ └── Sbanned.java │ │ │ │ │ ├── broker │ │ │ │ │ ├── Brokers.java │ │ │ │ │ ├── BrokersResponse.java │ │ │ │ │ └── BrokersResponseList.java │ │ │ │ │ ├── client │ │ │ │ │ ├── Client.java │ │ │ │ │ ├── ClientOne.java │ │ │ │ │ ├── ClientPage.java │ │ │ │ │ └── Meta.java │ │ │ │ │ ├── node │ │ │ │ │ ├── Node.java │ │ │ │ │ ├── NodeResponse.java │ │ │ │ │ └── NodeResponseList.java │ │ │ │ │ ├── pub │ │ │ │ │ └── Publish.java │ │ │ │ │ ├── resources │ │ │ │ │ ├── Resource.java │ │ │ │ │ ├── ResourceParameters.java │ │ │ │ │ └── ResourceResponse.java │ │ │ │ │ └── rules │ │ │ │ │ ├── Rule.java │ │ │ │ │ ├── RuleParameters.java │ │ │ │ │ └── RuleResponse.java │ │ │ │ ├── common │ │ │ │ ├── MsgDecoder.java │ │ │ │ ├── MsgEncoder.java │ │ │ │ ├── SuperConsumer.java │ │ │ │ ├── SupperRpcConsumer.java │ │ │ │ └── ThreadUtils.java │ │ │ │ ├── config │ │ │ │ ├── EmqConfig.java │ │ │ │ └── MqttCallback.java │ │ │ │ ├── consumer │ │ │ │ ├── ClientCount.java │ │ │ │ ├── ConnectMsg.java │ │ │ │ ├── DeviceMsg.java │ │ │ │ └── DisConnectMsg.java │ │ │ │ ├── controller │ │ │ │ ├── BannedController.java │ │ │ │ ├── LoadController.java │ │ │ │ └── PubController.java │ │ │ │ ├── entity │ │ │ │ ├── Connect.java │ │ │ │ ├── Disconnect.java │ │ │ │ ├── EmqProperties.java │ │ │ │ ├── HttpAuthCode.java │ │ │ │ ├── Pattern.java │ │ │ │ └── SubscriptTopic.java │ │ │ │ ├── rrpc │ │ │ │ ├── RrpcConsumer.java │ │ │ │ └── redis │ │ │ │ │ └── RedisConfig.java │ │ │ │ ├── shadow │ │ │ │ ├── BaseShadow.java │ │ │ │ ├── CacheShadow.java │ │ │ │ ├── Metadata.java │ │ │ │ ├── State.java │ │ │ │ └── test │ │ │ │ │ ├── Light.java │ │ │ │ │ ├── LightShadow.java │ │ │ │ │ ├── PullStatus.java │ │ │ │ │ └── UpdateLightStatus.java │ │ │ │ ├── utils │ │ │ │ ├── ApplicationContextUtil.java │ │ │ │ └── PubMessageUtils.java │ │ │ │ └── webhook │ │ │ │ ├── WebHookController.java │ │ │ │ └── model │ │ │ │ ├── ClientMessage.java │ │ │ │ ├── WhConnect.java │ │ │ │ └── WhDisconnect.java │ │ └── resources │ │ │ └── application.yml │ └── test │ │ └── java │ │ └── com │ │ ├── Jtest.java │ │ └── gitee │ │ └── test │ │ ├── JDKTest.java │ │ ├── MqttSend.java │ │ └── MqttTest.java └── 共享订阅.md ├── iot-TDengine-mybatis ├── TDengine在java中的使用.md ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── iot │ │ └── tdengine │ │ ├── TDengineApplication.java │ │ ├── controller │ │ └── WeatherController.java │ │ ├── dao │ │ └── WeatherMapper.java │ │ ├── domain │ │ └── Weather.java │ │ └── service │ │ └── WeatherService.java │ └── resources │ ├── application.yml │ └── mapper │ └── WeatherMapper.xml ├── iot-modbus-tcp ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── gitee │ └── iot │ └── SimpleMasterExample.java ├── iot-modbus ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── gitee │ └── iot │ ├── Modbus4jUtils.java │ └── Modbus4jWriteUtils.java ├── iot-mongodb ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── mongodb │ │ ├── MongoDBApplication.java │ │ ├── base │ │ ├── R.java │ │ ├── controller │ │ │ ├── BaseController.java │ │ │ ├── DeleteController.java │ │ │ ├── PageController.java │ │ │ ├── QueryController.java │ │ │ ├── SaveController.java │ │ │ └── SuperDataController.java │ │ └── service │ │ │ ├── BaseDataService.java │ │ │ └── SupperService.java │ │ ├── config │ │ └── SwaggerConfig.java │ │ ├── controller │ │ └── UserController.java │ │ ├── dao │ │ └── UserDao.java │ │ ├── model │ │ └── User.java │ │ └── service │ │ └── UserService.java │ └── resources │ └── application.yml ├── iot-vue-mqtt ├── config │ └── sysconstant.js └── src │ └── components │ ├── Helloword.vue │ └── Vue-mqtt.vue ├── mqtt-integration ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── gitee │ │ └── iot │ │ ├── IntegrationApplication.java │ │ ├── conf │ │ └── MqttConfig.java │ │ ├── controller │ │ └── MqttController.java │ │ ├── mqtt │ │ ├── MqttReceiveHandler.java │ │ └── MqttSendHandler.java │ │ └── property │ │ └── MqttProperty.java │ └── resources │ └── application.yml ├── mqtt-test ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── gitee │ │ └── mqtt │ │ └── test │ │ ├── ModifyContent.java │ │ ├── ModifyFileName.java │ │ └── MqttSend.java │ └── resources │ └── application.yml └── pom.xml /.gitignore: -------------------------------------------------------------------------------- 1 | .git 2 | logs 3 | #*.gitignore 4 | rebel.xml 5 | target/ 6 | !.mvn/wrapper/maven-wrapper.jar 7 | log.path_IS_UNDEFINED 8 | .DS_Store 9 | offline_user.md 10 | spy.log 11 | 12 | ### STS ### 13 | .apt_generated 14 | .classpath 15 | .factorypath 16 | .project 17 | .settings 18 | .springBeans 19 | 20 | ### IntelliJ IDEA ### 21 | .idea 22 | *.iws 23 | *.iml 24 | *.ipr 25 | 26 | ### NetBeans ### 27 | nbproject/private/ 28 | build/ 29 | nbbuild/ 30 | dist/ 31 | nbdist/ 32 | .nb-gradle/ 33 | generatorConfig.xml 34 | 35 | ### nacos ### 36 | third-party/nacos/derby.log 37 | third-party/nacos/data/ 38 | third-party/nacos/work/ 39 | 40 | ### vue ### 41 | node_modules/ 42 | npm-debug.log* 43 | yarn-debug.log* 44 | yarn-error.log* 45 | **/*.log 46 | 47 | tests/**/coverage/ 48 | tests/e2e/reports 49 | selenium-debug.log 50 | 51 | # Editor directories and files 52 | .history/ 53 | .vscode 54 | *.suo 55 | *.ntvs* 56 | *.njsproj 57 | *.sln 58 | *.local 59 | 60 | package-lock.json 61 | yarn.lock -------------------------------------------------------------------------------- /docs/docker/emqee/etc/acl.conf: -------------------------------------------------------------------------------- 1 | %%-------------------------------------------------------------------- 2 | %% [ACL](https://docs.emqx.io/broker/v3/en/config.html) 3 | %% 4 | %% -type(who() :: all | binary() | 5 | %% {ipaddr, esockd_access:cidr()} | 6 | %% {client, binary()} | 7 | %% {user, binary()}). 8 | %% 9 | %% -type(access() :: subscribe | publish | pubsub). 10 | %% 11 | %% -type(topic() :: binary()). 12 | %% 13 | %% -type(rule() :: {allow, all} | 14 | %% {allow, who(), access(), list(topic())} | 15 | %% {deny, all} | 16 | %% {deny, who(), access(), list(topic())}). 17 | %%-------------------------------------------------------------------- 18 | 19 | {allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}. 20 | 21 | {allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}. 22 | 23 | {deny, all, subscribe, ["$SYS/#", {eq, "#"}]}. 24 | 25 | {allow, all}. 26 | 27 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/certs/README: -------------------------------------------------------------------------------- 1 | Place your SSL/TLS Certificates here. 2 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/certs/cacert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDUTCCAjmgAwIBAgIJAPPYCjTmxdt/MA0GCSqGSIb3DQEBCwUAMD8xCzAJBgNV 3 | BAYTAkNOMREwDwYDVQQIDAhoYW5nemhvdTEMMAoGA1UECgwDRU1RMQ8wDQYDVQQD 4 | DAZSb290Q0EwHhcNMjAwNTA4MDgwNjUyWhcNMzAwNTA2MDgwNjUyWjA/MQswCQYD 5 | VQQGEwJDTjERMA8GA1UECAwIaGFuZ3pob3UxDDAKBgNVBAoMA0VNUTEPMA0GA1UE 6 | AwwGUm9vdENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzcgVLex1 7 | EZ9ON64EX8v+wcSjzOZpiEOsAOuSXOEN3wb8FKUxCdsGrsJYB7a5VM/Jot25Mod2 8 | juS3OBMg6r85k2TWjdxUoUs+HiUB/pP/ARaaW6VntpAEokpij/przWMPgJnBF3Ur 9 | MjtbLayH9hGmpQrI5c2vmHQ2reRZnSFbY+2b8SXZ+3lZZgz9+BaQYWdQWfaUWEHZ 10 | uDaNiViVO0OT8DRjCuiDp3yYDj3iLWbTA/gDL6Tf5XuHuEwcOQUrd+h0hyIphO8D 11 | tsrsHZ14j4AWYLk1CPA6pq1HIUvEl2rANx2lVUNv+nt64K/Mr3RnVQd9s8bK+TXQ 12 | KGHd2Lv/PALYuwIDAQABo1AwTjAdBgNVHQ4EFgQUGBmW+iDzxctWAWxmhgdlE8Pj 13 | EbQwHwYDVR0jBBgwFoAUGBmW+iDzxctWAWxmhgdlE8PjEbQwDAYDVR0TBAUwAwEB 14 | /zANBgkqhkiG9w0BAQsFAAOCAQEAGbhRUjpIred4cFAFJ7bbYD9hKu/yzWPWkMRa 15 | ErlCKHmuYsYk+5d16JQhJaFy6MGXfLgo3KV2itl0d+OWNH0U9ULXcglTxy6+njo5 16 | CFqdUBPwN1jxhzo9yteDMKF4+AHIxbvCAJa17qcwUKR5MKNvv09C6pvQDJLzid7y 17 | E2dkgSuggik3oa0427KvctFf8uhOV94RvEDyqvT5+pgNYZ2Yfga9pD/jjpoHEUlo 18 | 88IGU8/wJCx3Ds2yc8+oBg/ynxG8f/HmCC1ET6EHHoe2jlo8FpU/SgGtghS1YL30 19 | IWxNsPrUP+XsZpBJy/mvOhE5QXo6Y35zDqqj8tI7AGmAWu22jg== 20 | -----END CERTIFICATE----- 21 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/certs/cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDEzCCAfugAwIBAgIBAjANBgkqhkiG9w0BAQsFADA/MQswCQYDVQQGEwJDTjER 3 | MA8GA1UECAwIaGFuZ3pob3UxDDAKBgNVBAoMA0VNUTEPMA0GA1UEAwwGUm9vdENB 4 | MB4XDTIwMDUwODA4MDcwNVoXDTMwMDUwNjA4MDcwNVowPzELMAkGA1UEBhMCQ04x 5 | ETAPBgNVBAgMCGhhbmd6aG91MQwwCgYDVQQKDANFTVExDzANBgNVBAMMBlNlcnZl 6 | cjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALNeWT3pE+QFfiRJzKmn 7 | AMUrWo3K2j/Tm3+Xnl6WLz67/0rcYrJbbKvS3uyRP/stXyXEKw9CepyQ1ViBVFkW 8 | Aoy8qQEOWFDsZc/5UzhXUnb6LXr3qTkFEjNmhj+7uzv/lbBxlUG1NlYzSeOB6/RT 9 | 8zH/lhOeKhLnWYPXdXKsa1FL6ij4X8DeDO1kY7fvAGmBn/THh1uTpDizM4YmeI+7 10 | 4dmayA5xXvARte5h4Vu5SIze7iC057N+vymToMk2Jgk+ZZFpyXrnq+yo6RaD3ANc 11 | lrc4FbeUQZ5a5s5Sxgs9a0Y3WMG+7c5VnVXcbjBRz/aq2NtOnQQjikKKQA8GF080 12 | BQkCAwEAAaMaMBgwCQYDVR0TBAIwADALBgNVHQ8EBAMCBeAwDQYJKoZIhvcNAQEL 13 | BQADggEBAJefnMZpaRDHQSNUIEL3iwGXE9c6PmIsQVE2ustr+CakBp3TZ4l0enLt 14 | iGMfEVFju69cO4oyokWv+hl5eCMkHBf14Kv51vj448jowYnF1zmzn7SEzm5Uzlsa 15 | sqjtAprnLyof69WtLU1j5rYWBuFX86yOTwRAFNjm9fvhAcrEONBsQtqipBWkMROp 16 | iUYMkRqbKcQMdwxov+lHBYKq9zbWRoqLROAn54SRqgQk6c15JdEfgOOjShbsOkIH 17 | UhqcwRkQic7n1zwHVGVDgNIZVgmJ2IdIWBlPEC7oLrRrBD/X1iEEXtKab6p5o22n 18 | KB5mN+iQaE+Oe2cpGKZJiJRdM+IqDDQ= 19 | -----END CERTIFICATE----- 20 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/certs/client-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDEzCCAfugAwIBAgIBATANBgkqhkiG9w0BAQsFADA/MQswCQYDVQQGEwJDTjER 3 | MA8GA1UECAwIaGFuZ3pob3UxDDAKBgNVBAoMA0VNUTEPMA0GA1UEAwwGUm9vdENB 4 | MB4XDTIwMDUwODA4MDY1N1oXDTMwMDUwNjA4MDY1N1owPzELMAkGA1UEBhMCQ04x 5 | ETAPBgNVBAgMCGhhbmd6aG91MQwwCgYDVQQKDANFTVExDzANBgNVBAMMBkNsaWVu 6 | dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMy4hoksKcZBDbY680u6 7 | TS25U51nuB1FBcGMlF9B/t057wPOlxF/OcmbxY5MwepS41JDGPgulE1V7fpsXkiW 8 | 1LUimYV/tsqBfymIe0mlY7oORahKji7zKQ2UBIVFhdlvQxunlIDnw6F9popUgyHt 9 | dMhtlgZK8oqRwHxO5dbfoukYd6J/r+etS5q26sgVkf3C6dt0Td7B25H9qW+f7oLV 10 | PbcHYCa+i73u9670nrpXsC+Qc7Mygwa2Kq/jwU+ftyLQnOeW07DuzOwsziC/fQZa 11 | nbxR+8U9FNftgRcC3uP/JMKYUqsiRAuaDokARZxVTV5hUElfpO6z6/NItSDvvh3i 12 | eikCAwEAAaMaMBgwCQYDVR0TBAIwADALBgNVHQ8EBAMCBeAwDQYJKoZIhvcNAQEL 13 | BQADggEBABchYxKo0YMma7g1qDswJXsR5s56Czx/I+B41YcpMBMTrRqpUC0nHtLk 14 | M7/tZp592u/tT8gzEnQjZLKBAhFeZaR3aaKyknLqwiPqJIgg0pgsBGITrAK3Pv4z 15 | 5/YvAJJKgTe5UdeTz6U4lvNEux/4juZ4pmqH4qSFJTOzQS7LmgSmNIdd072rwXBd 16 | UzcSHzsJgEMb88u/LDLjj1pQ7AtZ4Tta8JZTvcgBFmjB0QUi6fgkHY6oGat/W4kR 17 | jSRUBlMUbM/drr2PVzRc2dwbFIl3X+ZE6n5Sl3ZwRAC/s92JU6CPMRW02muVu6xl 18 | goraNgPISnrbpR6KjxLZkVembXzjNNc= 19 | -----END CERTIFICATE----- 20 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/certs/client-key.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEpAIBAAKCAQEAzLiGiSwpxkENtjrzS7pNLblTnWe4HUUFwYyUX0H+3TnvA86X 3 | EX85yZvFjkzB6lLjUkMY+C6UTVXt+mxeSJbUtSKZhX+2yoF/KYh7SaVjug5FqEqO 4 | LvMpDZQEhUWF2W9DG6eUgOfDoX2milSDIe10yG2WBkryipHAfE7l1t+i6Rh3on+v 5 | 561LmrbqyBWR/cLp23RN3sHbkf2pb5/ugtU9twdgJr6Lve73rvSeulewL5BzszKD 6 | BrYqr+PBT5+3ItCc55bTsO7M7CzOIL99BlqdvFH7xT0U1+2BFwLe4/8kwphSqyJE 7 | C5oOiQBFnFVNXmFQSV+k7rPr80i1IO++HeJ6KQIDAQABAoIBAGWgvPjfuaU3qizq 8 | uti/FY07USz0zkuJdkANH6LiSjlchzDmn8wJ0pApCjuIE0PV/g9aS8z4opp5q/gD 9 | UBLM/a8mC/xf2EhTXOMrY7i9p/I3H5FZ4ZehEqIw9sWKK9YzC6dw26HabB2BGOnW 10 | 5nozPSQ6cp2RGzJ7BIkxSZwPzPnVTgy3OAuPOiJytvK+hGLhsNaT+Y9bNDvplVT2 11 | ZwYTV8GlHZC+4b2wNROILm0O86v96O+Qd8nn3fXjGHbMsAnONBq10bZS16L4fvkH 12 | 5G+W/1PeSXmtZFppdRRDxIW+DWcXK0D48WRliuxcV4eOOxI+a9N2ZJZZiNLQZGwg 13 | w3A8+mECgYEA8HuJFrlRvdoBe2U/EwUtG74dcyy30L4yEBnN5QscXmEEikhaQCfX 14 | Wm6EieMcIB/5I5TQmSw0cmBMeZjSXYoFdoI16/X6yMMuATdxpvhOZGdUGXxhAH+x 15 | xoTUavWZnEqW3fkUU71kT5E2f2i+0zoatFESXHeslJyz85aAYpP92H0CgYEA2e5A 16 | Yozt5eaA1Gyhd8SeptkEU4xPirNUnVQHStpMWUb1kzTNXrPmNWccQ7JpfpG6DcYl 17 | zUF6p6mlzY+zkMiyPQjwEJlhiHM2NlL1QS7td0R8ewgsFoyn8WsBI4RejWrEG9td 18 | EDniuIw+pBFkcWthnTLHwECHdzgquToyTMjrBB0CgYEA28tdGbrZXhcyAZEhHAZA 19 | Gzog+pKlkpEzeonLKIuGKzCrEKRecIK5jrqyQsCjhS0T7ZRnL4g6i0s+umiV5M5w 20 | fcc292pEA1h45L3DD6OlKplSQVTv55/OYS4oY3YEJtf5mfm8vWi9lQeY8sxOlQpn 21 | O+VZTdBHmTC8PGeTAgZXHZUCgYA6Tyv88lYowB7SN2qQgBQu8jvdGtqhcs/99GCr 22 | H3N0I69LPsKAR0QeH8OJPXBKhDUywESXAaEOwS5yrLNP1tMRz5Vj65YUCzeDG3kx 23 | gpvY4IMp7ArX0bSRvJ6mYSFnVxy3k174G3TVCfksrtagHioVBGQ7xUg5ltafjrms 24 | n8l55QKBgQDVzU8tQvBVqY8/1lnw11Vj4fkE/drZHJ5UkdC1eenOfSWhlSLfUJ8j 25 | ds7vEWpRPPoVuPZYeR1y78cyxKe1GBx6Wa2lF5c7xjmiu0xbRnrxYeLolce9/ntp 26 | asClqpnHT8/VJYTD7Kqj0fouTTZf0zkig/y+2XERppd8k+pSKjUCPQ== 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/certs/key.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEowIBAAKCAQEAs15ZPekT5AV+JEnMqacAxStajcraP9Obf5eeXpYvPrv/Stxi 3 | sltsq9Le7JE/+y1fJcQrD0J6nJDVWIFUWRYCjLypAQ5YUOxlz/lTOFdSdvotevep 4 | OQUSM2aGP7u7O/+VsHGVQbU2VjNJ44Hr9FPzMf+WE54qEudZg9d1cqxrUUvqKPhf 5 | wN4M7WRjt+8AaYGf9MeHW5OkOLMzhiZ4j7vh2ZrIDnFe8BG17mHhW7lIjN7uILTn 6 | s36/KZOgyTYmCT5lkWnJeuer7KjpFoPcA1yWtzgVt5RBnlrmzlLGCz1rRjdYwb7t 7 | zlWdVdxuMFHP9qrY206dBCOKQopADwYXTzQFCQIDAQABAoIBAQCuvCbr7Pd3lvI/ 8 | n7VFQG+7pHRe1VKwAxDkx2t8cYos7y/QWcm8Ptwqtw58HzPZGWYrgGMCRpzzkRSF 9 | V9g3wP1S5Scu5C6dBu5YIGc157tqNGXB+SpdZddJQ4Nc6yGHXYERllT04ffBGc3N 10 | WG/oYS/1cSteiSIrsDy/91FvGRCi7FPxH3wIgHssY/tw69s1Cfvaq5lr2NTFzxIG 11 | xCvpJKEdSfVfS9I7LYiymVjst3IOR/w76/ZFY9cRa8ZtmQSWWsm0TUpRC1jdcbkm 12 | ZoJptYWlP+gSwx/fpMYftrkJFGOJhHJHQhwxT5X/ajAISeqjjwkWSEJLwnHQd11C 13 | Zy2+29lBAoGBANlEAIK4VxCqyPXNKfoOOi5dS64NfvyH4A1v2+KaHWc7lqaqPN49 14 | ezfN2n3X+KWx4cviDD914Yc2JQ1vVJjSaHci7yivocDo2OfZDmjBqzaMp/y+rX1R 15 | /f3MmiTqMa468rjaxI9RRZu7vDgpTR+za1+OBCgMzjvAng8dJuN/5gjlAoGBANNY 16 | uYPKtearBmkqdrSV7eTUe49Nhr0XotLaVBH37TCW0Xv9wjO2xmbm5Ga/DCtPIsBb 17 | yPeYwX9FjoasuadUD7hRvbFu6dBa0HGLmkXRJZTcD7MEX2Lhu4BuC72yDLLFd0r+ 18 | Ep9WP7F5iJyagYqIZtz+4uf7gBvUDdmvXz3sGr1VAoGAdXTD6eeKeiI6PlhKBztF 19 | zOb3EQOO0SsLv3fnodu7ZaHbUgLaoTMPuB17r2jgrYM7FKQCBxTNdfGZmmfDjlLB 20 | 0xZ5wL8ibU30ZXL8zTlWPElST9sto4B+FYVVF/vcG9sWeUUb2ncPcJ/Po3UAktDG 21 | jYQTTyuNGtSJHpad/YOZctkCgYBtWRaC7bq3of0rJGFOhdQT9SwItN/lrfj8hyHA 22 | OjpqTV4NfPmhsAtu6j96OZaeQc+FHvgXwt06cE6Rt4RG4uNPRluTFgO7XYFDfitP 23 | vCppnoIw6S5BBvHwPP+uIhUX2bsi/dm8vu8tb+gSvo4PkwtFhEr6I9HglBKmcmog 24 | q6waEQKBgHyecFBeM6Ls11Cd64vborwJPAuxIW7HBAFj/BS99oeG4TjBx4Sz2dFd 25 | rzUibJt4ndnHIvCN8JQkjNG14i9hJln+H3mRss8fbZ9vQdqG+2vOWADYSzzsNI55 26 | RFY7JjluKcVkp/zCDeUxTU3O6sS+v6/3VE11Cob6OYQx3lN5wrZ3 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/emqx.lic: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIEajCCA1KgAwIBAgIDJxWfMA0GCSqGSIb3DQEBCwUAMIGDMQswCQYDVQQGEwJD 3 | TjERMA8GA1UECAwIWmhlamlhbmcxETAPBgNVBAcMCEhhbmd6aG91MQwwCgYDVQQK 4 | DANFTVExDDAKBgNVBAsMA0VNUTESMBAGA1UEAwwJKi5lbXF4LmlvMR4wHAYJKoZI 5 | hvcNAQkBFg96aGFuZ3doQGVtcXguaW8wHhcNMjAxMjAyMDU0MjE5WhcNMjEwMTAx 6 | MDU0MjE5WjCBjDELMAkGA1UEBhMCQ04xLTArBgNVBAoMJOays+WNl+S4vuaOqueU 7 | teWtkOenkeaKgOaciemZkOWFrOWPuDEtMCsGA1UEAwwk5rKz5Y2X5Li+5o6q55S1 8 | 5a2Q56eR5oqA5pyJ6ZmQ5YWs5Y+4MR8wHQYJKoZIhvcNAQkBFhAyNzUyMzYzNjdA 9 | cXEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyOyBVy5ksSsa 10 | GciBldMNJG2Nr+ceY91bl8spJNAc99/DjCf2n/+v0aUIHTdnm7ojEZPtzoe44KtH 11 | rF0NmhIlYb796dCwg07ibV95upSohKc/2Tt5nCfJ0sk9UEX5gunzJyP7ZCG/chwr 12 | UEhu/u5JtIOlNEUY4zhJ6woIngfk5NFZD47xcLYlp/mRNWge3qGlVGmYQGlJZC33 13 | Y42ukQuAppUIcdylBGLRp1fbYto1C7jm+zv0cQYovHt95T7C+L9V0YB1SJhkohFP 14 | /gbxOPrFYPRhzPbV9CmHsz/FqUrdFGXKXYGNG/q3K619knxMVyT8wpPvjvFVz+Fz 15 | 6Pzfd0wDVwIDAQABo4HbMIHYMBQGCSsGAQQBg5odAQQHDAUxMDAwMDCBmgYJKwYB 16 | BAGDmh0CBIGMDIGJZW1xeF9iYWNrZW5kX3JlZGlzLCBlbXF4X2JhY2tlbmRfbXlz 17 | cWwsIGVtcXhfYmFja2VuZF9wZ3NxbCwgZW1xeF9iYWNrZW5kX21vbmdvLCBlbXF4 18 | X2JhY2tlbmRfY2Fzc2EsIGVtcXhfYnJpZGdlX2thZmthLCBlbXF4X2JyaWRnZV9y 19 | YWJiaXQwEAYJKwYBBAGDmh0DBAMMATAwEQYJKwYBBAGDmh0EBAQMAi0xMA0GCSqG 20 | SIb3DQEBCwUAA4IBAQCP5lgK3VQT3mYHA8JuZcVGT26NnnBZHtPSgyQgNbjN4KGz 21 | eoO6BgElN22iyVwOf0vDaGrPKtVA66L2vk13Kh5gPJxCkhAl2UAt9iO/RbvedAzr 22 | YFooOWWw42LNfRg13x1kkDQObjLVS0RCxB4EIb4EJt955aa3Bx8V1ApES3SWwNSQ 23 | g7TnE+iAuJOduEcRxiUVTnoxw/ftQ03YqCxP8VK3e+a3JkuEIn8egMXDdFDsdoty 24 | 3cGLSzNJx6VIHyHg8ljtD5udA0d//+P1AmYHg7kZyRyqCzP+UEw1owMi4Jfzh0/N 25 | hBG1Tu0E1Dh9Dp9KOqWoT7D8qbGgt/VlwnEi2c+O 26 | -----END CERTIFICATE----- 27 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/acl.conf.paho: -------------------------------------------------------------------------------- 1 | %%-------------------------------------------------------------------- 2 | %% For paho interoperability test cases 3 | %%-------------------------------------------------------------------- 4 | 5 | {deny, {client, "myclientid"}, subscribe, ["test/nosubscribe"]}. 6 | 7 | {allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}. 8 | 9 | {allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}. 10 | 11 | {deny, all, subscribe, ["$SYS/#", {eq, "#"}]}. 12 | 13 | {allow, all}. 14 | 15 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/emqx_auth_jwt.conf: -------------------------------------------------------------------------------- 1 | ##-------------------------------------------------------------------- 2 | ## JWT Auth Plugin 3 | ##-------------------------------------------------------------------- 4 | 5 | ## HMAC Hash Secret. 6 | ## 7 | ## Value: String 8 | auth.jwt.secret = emqxsecret 9 | 10 | ## RSA or ECDSA public key file. 11 | ## 12 | ## Value: File 13 | #auth.jwt.pubkey = etc/certs/jwt_public_key.pem 14 | 15 | ## The JWKs server address 16 | ## 17 | ## see: http://self-issued.info/docs/draft-ietf-jose-json-web-key.html 18 | ## 19 | #auth.jwt.jwks = https://127.0.0.1:8080/jwks 20 | 21 | ## The JWKs refresh interval 22 | ## 23 | ## Value: Duration 24 | #auth.jwt.jwks.refresh_interval = 5m 25 | 26 | ## From where the JWT string can be got 27 | ## 28 | ## Value: username | password 29 | ## Default: password 30 | auth.jwt.from = password 31 | 32 | ## Enable to verify claims fields 33 | ## 34 | ## Value: on | off 35 | auth.jwt.verify_claims = off 36 | 37 | ## The checklist of claims to validate 38 | ## 39 | ## Value: String 40 | ## auth.jwt.verify_claims.$name = expected 41 | ## 42 | ## Variables: 43 | ## - %u: username 44 | ## - %c: clientid 45 | #auth.jwt.verify_claims.username = %u 46 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/emqx_auth_ldap.conf: -------------------------------------------------------------------------------- 1 | ##-------------------------------------------------------------------- 2 | ## LDAP Auth Plugin 3 | ##-------------------------------------------------------------------- 4 | 5 | ## LDAP server list, seperated by ','. 6 | ## 7 | ## Value: String 8 | auth.ldap.servers = 127.0.0.1 9 | 10 | ## LDAP server port. 11 | ## 12 | ## Value: Port 13 | auth.ldap.port = 389 14 | 15 | ## LDAP pool size 16 | ## 17 | ## Value: String 18 | auth.ldap.pool = 8 19 | 20 | ## LDAP Bind DN. 21 | ## 22 | ## Value: DN 23 | auth.ldap.bind_dn = cn=root,dc=emqx,dc=io 24 | 25 | ## LDAP Bind Password. 26 | ## 27 | ## Value: String 28 | auth.ldap.bind_password = public 29 | 30 | ## LDAP query timeout. 31 | ## 32 | ## Value: Number 33 | auth.ldap.timeout = 30s 34 | 35 | ## Device DN. 36 | ## 37 | ## Variables: 38 | ## 39 | ## Value: DN 40 | auth.ldap.device_dn = ou=device,dc=emqx,dc=io 41 | 42 | ## Specified ObjectClass 43 | ## 44 | ## Variables: 45 | ## 46 | ## Value: string 47 | auth.ldap.match_objectclass = mqttUser 48 | 49 | ## attributetype for username 50 | ## 51 | ## Variables: 52 | ## 53 | ## Value: string 54 | auth.ldap.username.attributetype = uid 55 | 56 | ## attributetype for password 57 | ## 58 | ## Variables: 59 | ## 60 | ## Value: string 61 | auth.ldap.password.attributetype = userPassword 62 | 63 | ## Whether to enable SSL. 64 | ## 65 | ## Value: true | false 66 | auth.ldap.ssl = false 67 | 68 | #auth.ldap.ssl.certfile = etc/certs/cert.pem 69 | 70 | #auth.ldap.ssl.keyfile = etc/certs/key.pem 71 | 72 | #auth.ldap.ssl.cacertfile = etc/certs/cacert.pem 73 | 74 | #auth.ldap.ssl.verify = verify_peer 75 | 76 | #auth.ldap.ssl.fail_if_no_peer_cert = true 77 | 78 | #auth.ldap.ssl.server_name_indication = your_server_name 79 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/emqx_auth_mnesia.conf: -------------------------------------------------------------------------------- 1 | ## Password hash. 2 | ## 3 | ## Value: plain | md5 | sha | sha256 | sha512 4 | auth.mnesia.password_hash = sha256 5 | 6 | ##-------------------------------------------------------------------- 7 | ## ClientId Authentication 8 | ##-------------------------------------------------------------------- 9 | 10 | ## Examples 11 | ##auth.client.1.clientid = id 12 | ##auth.client.1.password = passwd 13 | ##auth.client.2.clientid = dev:devid 14 | ##auth.client.2.password = passwd2 15 | ##auth.client.3.clientid = app:appid 16 | ##auth.client.3.password = passwd3 17 | ##auth.client.4.clientid = client~!@#$%^&*()_+ 18 | ##auth.client.4.password = passwd~!@#$%^&*()_+ 19 | 20 | ##-------------------------------------------------------------------- 21 | ## Username Authentication 22 | ##-------------------------------------------------------------------- 23 | 24 | ## Examples: 25 | ##auth.user.1.username = admin 26 | ##auth.user.1.password = public 27 | ##auth.user.2.username = feng@emqtt.io 28 | ##auth.user.2.password = public 29 | ##auth.user.3.username = name~!@#$%^&*()_+ 30 | ##auth.user.3.password = pwsswd~!@#$%^&*()_+ 31 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/emqx_backend_opentsdb.conf: -------------------------------------------------------------------------------- 1 | ##==================================================================== 2 | ## Configuration for EMQ X OpenTSDB Backend 3 | ##==================================================================== 4 | 5 | ## OpenTSDB Server 6 | backend.opentsdb.pool1.server = 127.0.0.1:4242 7 | 8 | ## OpenTSDB Pool Size 9 | backend.opentsdb.pool1.pool_size = 8 10 | 11 | ## Whether or not to return summary information 12 | ## 13 | ## Value: true | false 14 | backend.opentsdb.pool1.summary = true 15 | 16 | ## Whether or not to return detailed information 17 | ## 18 | ## Value: true | false 19 | backend.opentsdb.pool1.details = false 20 | 21 | ## Whether or not to wait for the data to be flushed to storage before returning the results. 22 | ## 23 | ## Value: true | false 24 | backend.opentsdb.pool1.sync = false 25 | 26 | ## A timeout, in milliseconds, to wait for the data to be flushed to 27 | ## storage before returning with an error. 28 | ## 29 | ## Value: Duration 30 | ## 31 | ## Default: 0 32 | backend.opentsdb.pool1.sync_timeout = 0 33 | 34 | ## Max batch size of put 35 | ## 36 | ## Value: Number >= 0 37 | ## Default: 20 38 | backend.opentsdb.pool1.max_batch_size = 20 39 | 40 | ##-------------------------------------------------------------------- 41 | ## OpenTSDB Backend for EMQ 3.0 42 | ##-------------------------------------------------------------------- 43 | 44 | ## Store Publish Message QOS > 0 45 | backend.opentsdb.hook.message.publish.1 = {"topic": "#", "action": {"function": "on_message_publish"}, "pool": "pool1"} -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/emqx_backend_timescale.conf: -------------------------------------------------------------------------------- 1 | ##==================================================================== 2 | ## Configuration for EMQ X Timescale Backend 3 | ##==================================================================== 4 | 5 | ## Timescale Server 6 | backend.timescale.pool1.server = 127.0.0.1:5432 7 | ## Timescale Pool Size 8 | backend.timescale.pool1.pool_size = 8 9 | ## Timescale Username 10 | backend.timescale.pool1.username = root 11 | ## Timescale Password 12 | backend.timescale.pool1.password = public 13 | ## Timescale Database 14 | backend.timescale.pool1.database = mqtt 15 | ## Timescale SSL 16 | backend.timescale.pool1.ssl = false 17 | 18 | ## SSL keyfile. 19 | ## 20 | ## Value: File 21 | ## backend.timescale.pool1.keyfile = 22 | 23 | ## SSL certfile. 24 | ## 25 | ## Value: File 26 | ## backend.timescale.pool1.certfile = 27 | 28 | ## SSL cacertfile. 29 | ## 30 | ## Value: File 31 | ## backend.timescale.pool1.cacertfile = 32 | 33 | ##-------------------------------------------------------------------- 34 | ## Hooks 35 | ##-------------------------------------------------------------------- 36 | 37 | ## Store Publish Message 38 | backend.timescale.hook.message.publish.1 = {"topic": "#", "action": {"function": "on_message_publish"}, "pool": "pool1"} 39 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/emqx_bridge_rabbit.conf: -------------------------------------------------------------------------------- 1 | ##-------------------------------------------------------------------- 2 | ## RabbitMQ Bridge Configuration 3 | ##-------------------------------------------------------------------- 4 | 5 | ## Rabbit Brokers 6 | bridge.rabbit.1.server = 127.0.0.1:5672 7 | 8 | bridge.rabbit.1.pool_size = 8 9 | 10 | bridge.rabbit.1.username = guest 11 | 12 | bridge.rabbit.1.password = guest 13 | 14 | bridge.rabbit.1.timeout = 5s 15 | 16 | bridge.rabbit.1.virtual_host = / 17 | 18 | bridge.rabbit.1.heartbeat = 30s 19 | 20 | # bridge.rabbit.2.server = 127.0.0.1:5672 21 | 22 | # bridge.rabbit.2.pool_size = 8 23 | 24 | # bridge.rabbit.2.username = guest 25 | 26 | # bridge.rabbit.2.password = guest 27 | 28 | # bridge.rabbit.2.virtual_host = / 29 | 30 | # bridge.rabbit.2.heartbeat = 30s 31 | 32 | ## Bridge Hooks 33 | bridge.rabbit.hook.session.subscribed.1 = {"action": "on_session_subscribed", "rabbit": 1, "exchange": "direct:emqx.subscription"} 34 | 35 | bridge.rabbit.hook.session.unsubscribed.1 = {"action": "on_session_unsubscribed", "rabbit": 1, "exchange": "direct:emqx.subscription"} 36 | 37 | bridge.rabbit.hook.message.publish.1 = {"topic": "$SYS/#", "action": "on_message_publish", "rabbit": 1, "exchange": "topic:emqx.$sys"} 38 | 39 | bridge.rabbit.hook.message.publish.2 = {"topic": "#", "action": "on_message_publish", "rabbit": 1, "exchange": "topic:emqx.pub"} 40 | 41 | bridge.rabbit.hook.message.acked.1 = {"topic": "#", "action": "on_message_acked", "rabbit": 1, "exchange": "topic:emqx.acked"} 42 | 43 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/emqx_bridge_rocket.conf: -------------------------------------------------------------------------------- 1 | ##==================================================================== 2 | ## Configuration for EMQ X RocketMQ Bridge 3 | ##==================================================================== 4 | 5 | ## RocketMQ NaneServer, Cluster support 6 | ## bridge.rocket.servers = 127.0.0.1:9876,127.0.0.2:9876,127.0.0.3:9876 7 | bridge.rocket.servers = 127.0.0.1:9876 8 | 9 | bridge.rocket.refresh_topic_route_interval = 5S 10 | 11 | ## Pick a partition producer and sync/async. 12 | bridge.rocket.produce = sync 13 | 14 | ## Timeout for synchronous call 15 | ## bridge.rocket.produce.sync_timeout = 3s 16 | 17 | ## Batch size of asynchronous calls 18 | ## The total size of the messages in one batch should be no more than 1MiB. 19 | ## bridge.rocket.producer.batch_size = 100 20 | 21 | ## base64 | plain 22 | ## bridge.rocket.encode_payload_type = base64 23 | 24 | ## bridge.rocket.sock.buffer = 32KB 25 | ## bridge.rocket.sock.recbuf = 32KB 26 | bridge.rocket.sock.sndbuf = 1MB 27 | ## bridge.rocket.sock.read_packets = 20 28 | 29 | ## Bridge rocket Hooks 30 | ## ${topic}: the RocketMQ topics to which the messages will be published. 31 | ## ${filter}: the mqtt topic (may contain wildcard) on which the action will be performed . 32 | bridge.rocket.hook.client.connected.1 = {"topic":"ClientConnected"} 33 | bridge.rocket.hook.client.disconnected.1 = {"topic":"ClientDisconnected"} 34 | bridge.rocket.hook.session.subscribed.1 = {"filter":"#", "topic":"SessionSubscribed"} 35 | bridge.rocket.hook.session.unsubscribed.1 = {"filter":"#", "topic":"SessionUnsubscribed"} 36 | bridge.rocket.hook.message.publish.1 = {"filter":"#", "topic":"MessagePublish"} 37 | bridge.rocket.hook.message.delivered.1 = {"filter":"#", "topic":"MessageDeliver"} 38 | bridge.rocket.hook.message.acked.1 = {"filter":"#", "topic":"MessageAcked"} 39 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/emqx_conf.conf: -------------------------------------------------------------------------------- 1 | ##------------------------------------------------------------------------------ 2 | ## EMQX Conf 3 | ##------------------------------------------------------------------------------ 4 | conf.etc.dir.emqx = etc 5 | conf.etc.dir.emqx.zones = etc 6 | conf.etc.dir.emqx.listeners = etc 7 | conf.etc.dir.emqx.sys_mon = etc -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/emqx_exhook.conf: -------------------------------------------------------------------------------- 1 | ##==================================================================== 2 | ## EMQ X Hooks 3 | ##==================================================================== 4 | 5 | ##-------------------------------------------------------------------- 6 | ## Server Address 7 | 8 | ## The gRPC server url 9 | ## 10 | ## exhook.server.$name.url = url() 11 | exhook.server.default.url = http://127.0.0.1:9000 12 | 13 | #exhook.server.default.ssl.cacertfile = etc/certs/cacert.pem 14 | #exhook.server.default.ssl.certfile = etc/certs/cert.pem 15 | #exhook.server.default.ssl.keyfile = etc/certs/key.pem 16 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/emqx_jt808.conf: -------------------------------------------------------------------------------- 1 | ##---------------------------------------------------------- 2 | ## JT808 Connector 3 | ##---------------------------------------------------------- 4 | 5 | jt808.proto.allow_anonymous = true 6 | 7 | ## The JT/T 808 device registray central 8 | ## 9 | ##jt808.proto.registray = http://127.0.0.1:8991/jt808/registray 10 | 11 | ## The JT/T 808 device authentication central 12 | ## 13 | #jt808.proto.authentication = http://127.0.0.1:8991/jt808/auth 14 | 15 | ## Auto subscribe the following topic to recevie 16 | ## mqtt message from EMQ system, and deliver to client 17 | ## 18 | ## Placeholders: 19 | ## - %c: Client Id 20 | ## - %p: Phone 21 | jt808.proto.dn_topic = jt808/%c/dn 22 | 23 | ## Uplink data stream to mqtt message topic name 24 | ## 25 | ## Placeholders: 26 | ## - %c: Client Id 27 | ## - %p: Phone 28 | jt808.proto.up_topic = jt808/%c/up 29 | 30 | ## Connection Idle Timeout (Second) 31 | jt808.conn.idle_timeout = 30s 32 | 33 | ## Enable connection Stats: on | off 34 | jt808.conn.enable_stats = on 35 | 36 | ## Max allowed frame length 37 | jt808.frame.max_length = 8192 38 | 39 | ##---------------------------------------------------------- 40 | ## Listeners 41 | 42 | ## TCP Listener 43 | jt808.listener.tcp = 6207 44 | jt808.listener.tcp.acceptors = 4 45 | jt808.listener.tcp.max_clients = 512 46 | 47 | ## SSL Listener 48 | ## jt808.listener.ssl = 18084 49 | ## jt808.listener.ssl.acceptors = 2 50 | ## jt808.listener.ssl.max_clients = 512 51 | ## jt808.listener.ssl.handshake_timeout = 15 52 | ## jt808.listener.ssl.certfile = etc/certs/cert.pem 53 | ## jt808.listener.ssl.keyfile = etc/certs/key.pem 54 | ## jt808.listener.ssl.cacertfile = etc/certs/cacert.pem 55 | ## jt808.listener.ssl.verify = verify_peer 56 | ## jt808.listener.ssl.fail_if_no_peer_cert = true 57 | 58 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/emqx_lua_hook.conf: -------------------------------------------------------------------------------- 1 | ##-------------------------------------------------------------------- 2 | ## EMQ X Lua Hook 3 | ##-------------------------------------------------------------------- 4 | 5 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/emqx_modules.conf: -------------------------------------------------------------------------------- 1 | modules.loaded_file = data/loaded_modules -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/emqx_prometheus.conf: -------------------------------------------------------------------------------- 1 | ##-------------------------------------------------------------------- 2 | ## emqx_prometheus for EMQ X 3 | ##-------------------------------------------------------------------- 4 | 5 | ## The Prometheus Push Gateway URL address 6 | ## 7 | ## Note: You can comment out this line to disable it 8 | prometheus.push.gateway.server = http://127.0.0.1:9091 9 | 10 | ## The metrics data push interval (millisecond) 11 | ## 12 | ## Default: 15000 13 | prometheus.interval = 15000 14 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/emqx_psk_file.conf: -------------------------------------------------------------------------------- 1 | psk.file.path = etc/psk.txt 2 | psk.file.delimiter = : -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/emqx_recon.conf: -------------------------------------------------------------------------------- 1 | ##-------------------------------------------------------------------- 2 | ## Recon Plugin 3 | ##-------------------------------------------------------------------- 4 | 5 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/emqx_reloader.conf: -------------------------------------------------------------------------------- 1 | ##-------------------------------------------------------------------- 2 | ## Reloader Plugin 3 | ##-------------------------------------------------------------------- 4 | 5 | ## Interval of hot code reloading. 6 | ## 7 | ## Value: Duration 8 | ## - h: hour 9 | ## - m: minute 10 | ## - s: second 11 | ## 12 | ## Examples: 13 | ## - 2h: 2 hours 14 | ## - 30m: 30 minutes 15 | ## - 20s: 20 seconds 16 | ## 17 | ## Defaut: 60s 18 | reloader.interval = 60s 19 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/emqx_retainer.conf: -------------------------------------------------------------------------------- 1 | ##-------------------------------------------------------------------- 2 | ## EMQ X Retainer 3 | ##-------------------------------------------------------------------- 4 | 5 | ## Where to store the retained messages. 6 | ## 7 | ## Notice that all nodes in the same cluster have to be configured to 8 | ## use the same storage_type. 9 | ## 10 | ## Value: ram | disc | disc_only 11 | ## - ram: memory only 12 | ## - disc: both memory and disc 13 | ## - disc_only: disc only 14 | ## 15 | ## Default: ram 16 | retainer.storage_type = ram 17 | 18 | ## Maximum number of retained messages. 0 means no limit. 19 | ## 20 | ## Value: Number >= 0 21 | retainer.max_retained_messages = 0 22 | 23 | ## Maximum retained message size. 24 | ## 25 | ## Value: Bytes 26 | retainer.max_payload_size = 1MB 27 | 28 | ## Expiry interval of the retained messages. Never expire if the value is 0. 29 | ## 30 | ## Value: Duration 31 | ## - h: hour 32 | ## - m: minute 33 | ## - s: second 34 | ## 35 | ## Examples: 36 | ## - 2h: 2 hours 37 | ## - 30m: 30 minutes 38 | ## - 20s: 20 seconds 39 | ## 40 | ## Defaut: 0 41 | retainer.expiry_interval = 0 42 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/emqx_rule_engine.conf: -------------------------------------------------------------------------------- 1 | ##==================================================================== 2 | ## Rule Engine for EMQ X R4.0 3 | ##==================================================================== 4 | 5 | rule_engine.ignore_sys_message = on 6 | 7 | ## Event Messages 8 | ## 9 | ## If enabled (on), rule engine publishes the event as an MQTT message 10 | ## with topic='$events/' on the occurrence of an emqx event. 11 | ## 12 | ## If disabled, rule engine stops publishing the event messages, but 13 | ## the event message can still be processed by the rule SQL. e.g. rule SQL: 14 | ## 15 | ## SELECT * FROM "$events/client_connected" 16 | ## 17 | ## will still work even if 'rule_engine.events.client_connected' is set to 'off' 18 | ## 19 | ## EMQ Event to event message mapping: 20 | ## 21 | ## - client.connected -> $events/client_connected 22 | ## - client.disconnected -> $events/client_disconnected 23 | ## - session.subscribed -> $events/session_subscribed 24 | ## - session.unsubscribed -> $events/session_unsubscribed 25 | ## - message.delivered -> $events/message_delivered 26 | ## - message.acked -> $events/message_acked 27 | ## - message.dropped -> $events/message_dropped 28 | ## 29 | ## Config Value Format: Toggle, QoS-Level 30 | ## 31 | ## Toggle: on/off 32 | ## 33 | ## QoS-Level: qos0/qos1/qos2 34 | 35 | #rule_engine.events.client_connected = on, qos1 36 | rule_engine.events.client_connected = off 37 | rule_engine.events.client_disconnected = off 38 | rule_engine.events.session_subscribed = off 39 | rule_engine.events.session_unsubscribed = off 40 | rule_engine.events.message_delivered = off 41 | rule_engine.events.message_acked = off 42 | rule_engine.events.message_dropped = off 43 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/emqx_sasl.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/emqee/etc/plugins/emqx_sasl.conf -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/emqx_schema_registry.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/emqee/etc/plugins/emqx_schema_registry.conf -------------------------------------------------------------------------------- /docs/docker/emqee/etc/plugins/emqx_sn.conf: -------------------------------------------------------------------------------- 1 | ##-------------------------------------------------------------------- 2 | ## MQTT-SN 3 | ##-------------------------------------------------------------------- 4 | 5 | ## The UDP port which emq-sn is listening on. 6 | ## 7 | ## Value: IP:Port | Port 8 | ## 9 | ## Examples: 1884, 127.0.0.1:1884, ::1:1884 10 | mqtt.sn.port = 1884 11 | 12 | ## The duration that emqx-sn broadcast ADVERTISE message through. 13 | ## 14 | ## Value: Duration 15 | mqtt.sn.advertise_duration = 15m 16 | 17 | ## The MQTT-SN Gateway id in ADVERTISE message. 18 | ## 19 | ## Value: Number 20 | mqtt.sn.gateway_id = 1 21 | 22 | ## To control whether write statistics data into ETS table for dashbord to read. 23 | ## 24 | ## Value: on | off 25 | mqtt.sn.enable_stats = off 26 | 27 | ## To control whether accept and process the received publish message with qos=-1. 28 | ## 29 | ## Value: on | off 30 | mqtt.sn.enable_qos3 = off 31 | 32 | ## MQTT SN idle timeout, specified in seconds. 33 | ## 34 | ## Value: Duration 35 | mqtt.sn.idle_timeout = 30s 36 | 37 | ## The pre-defined topic name corresponding to the pre-defined topic id of N. 38 | ## Note that the pre-defined topic id of 0 is reserved. 39 | mqtt.sn.predefined.topic.0 = reserved 40 | mqtt.sn.predefined.topic.1 = /predefined/topic/name/hello 41 | mqtt.sn.predefined.topic.2 = /predefined/topic/name/nice 42 | 43 | ## Default username for MQTT-SN. This parameter is optional. If specified, 44 | ## emq-sn will connect EMQ core with this username. It is useful if any auth 45 | ## plug-in is enabled. 46 | ## 47 | ## Value: String 48 | mqtt.sn.username = mqtt_sn_user 49 | 50 | ## This parameter is optional. Pair with username above. 51 | ## 52 | ## Value: String 53 | mqtt.sn.password = abc 54 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/psk.txt: -------------------------------------------------------------------------------- 1 | client1:1234 2 | client2:abcd 3 | -------------------------------------------------------------------------------- /docs/docker/emqee/etc/ssl_dist.conf: -------------------------------------------------------------------------------- 1 | %% The options in the {server, Opts} tuple are used when calling ssl:ssl_accept/3, 2 | %% and the options in the {client, Opts} tuple are used when calling ssl:connect/4. 3 | %% 4 | %% More information at: http://erlang.org/doc/apps/ssl/ssl_distribution.html 5 | [{server, 6 | [{certfile, "etc/certs/cert.pem"}, 7 | {keyfile, "etc/certs/key.pem"}, 8 | {secure_renegotiate, true}, 9 | {depth, 0}]}, 10 | {client, 11 | [{secure_renegotiate, true}]}]. 12 | -------------------------------------------------------------------------------- /docs/docker/emqee/license/ReadMe.txt: -------------------------------------------------------------------------------- 1 | How to update EMQ X license: 2 | 3 | 1. After clicking "Download License", browse to the "license.zip" file that you downloaded. 4 | 5 | 2. Copy the two files(emqx.lic, emqx.key) in the zip file to the EMQX license directory. 6 | - If your installation package is a zip file, the licenses are under "emqx/etc/"; 7 | - For DEB/RPM package, the licenses are under "/etc/emqx/"; 8 | - For Docker image, the licenses are under "/opt/emqx/etc/". -------------------------------------------------------------------------------- /docs/docker/emqee/license/emqx.key: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEowIBAAKCAQEAyOyBVy5ksSsaGciBldMNJG2Nr+ceY91bl8spJNAc99/DjCf2 3 | n/+v0aUIHTdnm7ojEZPtzoe44KtHrF0NmhIlYb796dCwg07ibV95upSohKc/2Tt5 4 | nCfJ0sk9UEX5gunzJyP7ZCG/chwrUEhu/u5JtIOlNEUY4zhJ6woIngfk5NFZD47x 5 | cLYlp/mRNWge3qGlVGmYQGlJZC33Y42ukQuAppUIcdylBGLRp1fbYto1C7jm+zv0 6 | cQYovHt95T7C+L9V0YB1SJhkohFP/gbxOPrFYPRhzPbV9CmHsz/FqUrdFGXKXYGN 7 | G/q3K619knxMVyT8wpPvjvFVz+Fz6Pzfd0wDVwIDAQABAoIBAE63ugS5/GEdDeDE 8 | GWDliuSWt0gPOGzPsK7LvZbaoj7KwAYNMiaFOhDco00vA7yTNGISnrynl9sNv8rb 9 | uhR+v36IIVqVlFIdecB4A20CCPPPwsgM8Rwoyn12sjrc72BG4CiZhEg6oJLITn/p 10 | oPLn0KCUYwkTeSisSOl4yN+BIEA0wutktASmddO/rZt2hBlgcLOG7ygf94PslO11 11 | YhpMX1zSUb2zTwOxM0RX/g/4BFwaui4VPwd/fYh8w2YloE/WGugF3JmFE+QzhIuS 12 | m5h5uP0wTORekA448p4I+D2IsvZDCPP8coNtx2jMIGzpoSj36CSLd/9P06WXFxLq 13 | mXy4SmECgYEA6qpcFhv4rvpS2z4lc7srGC7v/gnSD2Bsm4ZcKoILLT5gYcXZGTBI 14 | POLWhE+nLdUpBs66N4mahpEj3qILFrcD0oMr5PCoff3AoiuPTTHvbXDWpzhbGAR1 15 | y+EDbo1dU7M3uY/pyopqqU+6j0UkI8Tw2zoemxoaorXHlPG+nDmQUlUCgYEA2zDW 16 | fzDm1gNhs721xWvsLm2LcU3Ztnx517dIaYpeyexbRVIcOc1SYsfSon3SboFZX+gT 17 | X9pQbIdduaKWom5qaAF4h+UPtl9TbGKwCqbqoEEQG8Pp02y4jQzdo39Nr60ibZPU 18 | jfdMOiRWs9NJQxEEONv5aZDgj42mkQ6Y3qBsIvsCgYEAml9x7tV91lY0taf/aU/i 19 | vKj8FimNt7HeIL3V2dzsz1mufAN0mx5pFyy+pBHmT79fmuvaEvkB366RYz9Efi/t 20 | YsoJ0TUEEsYguE5hmg3UjTFi9GSdgIJGn9WptUtn7s0CRp9G1IgUPMeHWgLJEILZ 21 | U867HZuhlBJzdidGFm3D5HUCgYAY6Pv3iH8zYz7/RlgaD6HPxPNL9SUA8DSIp3O7 22 | StZq7EmTHznF9+edAkiV3ubDWD/n/l/1TMJHEzs7lZa47wN4vnIMP6QBfePlNXH8 23 | Q+v2Om6yORmhxYFTxlqJ8jXJ+UsoWNyXJbur/+U6mpCA5rYsIBPAQ47Bwb9kTNxi 24 | sKiZcQKBgDbRG5HEaNi8bj+nGHCXYwN+tdJyqDBG22NKteipvImX2AZVrMCL1M7M 25 | 9YmNKlh280WRBoORQQ0iohTniGCcVCZWa6X2uf9nUA4eZGz5jIRfeWPGIdHqwbX5 26 | yRwNKZulLBrz15RWKWoDkh2ASq85qwa6zZ9xIyvwvmFltYVD66Wa 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /docs/docker/emqee/license/emqx.lic: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIEajCCA1KgAwIBAgIDJxWfMA0GCSqGSIb3DQEBCwUAMIGDMQswCQYDVQQGEwJD 3 | TjERMA8GA1UECAwIWmhlamlhbmcxETAPBgNVBAcMCEhhbmd6aG91MQwwCgYDVQQK 4 | DANFTVExDDAKBgNVBAsMA0VNUTESMBAGA1UEAwwJKi5lbXF4LmlvMR4wHAYJKoZI 5 | hvcNAQkBFg96aGFuZ3doQGVtcXguaW8wHhcNMjAxMjAyMDU0MjE5WhcNMjEwMTAx 6 | MDU0MjE5WjCBjDELMAkGA1UEBhMCQ04xLTArBgNVBAoMJOays+WNl+S4vuaOqueU 7 | teWtkOenkeaKgOaciemZkOWFrOWPuDEtMCsGA1UEAwwk5rKz5Y2X5Li+5o6q55S1 8 | 5a2Q56eR5oqA5pyJ6ZmQ5YWs5Y+4MR8wHQYJKoZIhvcNAQkBFhAyNzUyMzYzNjdA 9 | cXEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyOyBVy5ksSsa 10 | GciBldMNJG2Nr+ceY91bl8spJNAc99/DjCf2n/+v0aUIHTdnm7ojEZPtzoe44KtH 11 | rF0NmhIlYb796dCwg07ibV95upSohKc/2Tt5nCfJ0sk9UEX5gunzJyP7ZCG/chwr 12 | UEhu/u5JtIOlNEUY4zhJ6woIngfk5NFZD47xcLYlp/mRNWge3qGlVGmYQGlJZC33 13 | Y42ukQuAppUIcdylBGLRp1fbYto1C7jm+zv0cQYovHt95T7C+L9V0YB1SJhkohFP 14 | /gbxOPrFYPRhzPbV9CmHsz/FqUrdFGXKXYGNG/q3K619knxMVyT8wpPvjvFVz+Fz 15 | 6Pzfd0wDVwIDAQABo4HbMIHYMBQGCSsGAQQBg5odAQQHDAUxMDAwMDCBmgYJKwYB 16 | BAGDmh0CBIGMDIGJZW1xeF9iYWNrZW5kX3JlZGlzLCBlbXF4X2JhY2tlbmRfbXlz 17 | cWwsIGVtcXhfYmFja2VuZF9wZ3NxbCwgZW1xeF9iYWNrZW5kX21vbmdvLCBlbXF4 18 | X2JhY2tlbmRfY2Fzc2EsIGVtcXhfYnJpZGdlX2thZmthLCBlbXF4X2JyaWRnZV9y 19 | YWJiaXQwEAYJKwYBBAGDmh0DBAMMATAwEQYJKwYBBAGDmh0EBAQMAi0xMA0GCSqG 20 | SIb3DQEBCwUAA4IBAQCP5lgK3VQT3mYHA8JuZcVGT26NnnBZHtPSgyQgNbjN4KGz 21 | eoO6BgElN22iyVwOf0vDaGrPKtVA66L2vk13Kh5gPJxCkhAl2UAt9iO/RbvedAzr 22 | YFooOWWw42LNfRg13x1kkDQObjLVS0RCxB4EIb4EJt955aa3Bx8V1ApES3SWwNSQ 23 | g7TnE+iAuJOduEcRxiUVTnoxw/ftQ03YqCxP8VK3e+a3JkuEIn8egMXDdFDsdoty 24 | 3cGLSzNJx6VIHyHg8ljtD5udA0d//+P1AmYHg7kZyRyqCzP+UEw1owMi4Jfzh0/N 25 | hBG1Tu0E1Dh9Dp9KOqWoT7D8qbGgt/VlwnEi2c+O 26 | -----END CERTIFICATE----- 27 | -------------------------------------------------------------------------------- /docs/docker/emqee/log/emqx.log.1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/emqee/log/emqx.log.1 -------------------------------------------------------------------------------- /docs/docker/emqee/log/emqx.log.idx: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /docs/docker/emqee/log/emqx.log.siz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/emqee/log/emqx.log.siz -------------------------------------------------------------------------------- /docs/docker/emqee/log/erlang.log.1: -------------------------------------------------------------------------------- 1 | 2 | ===== 3 | ===== LOGGING STARTED Wed Dec 2 06:17:46 UTC 2020 4 | ===== 5 | Exec: /opt/emqx/erts-10.7.2.5/bin/erlexec -boot /opt/emqx/releases/4.2.1/emqx -mode embedded -boot_var ERTS_LIB_DIR /opt/emqx/erts-10.7.2.5/../lib -mnesia dir "/opt/emqx/data/mnesia/def2d8df4af4@172.17.0.5" -config /opt/emqx/data/configs/app.2020.12.02.06.17.47.config -args_file /opt/emqx/data/configs/vm.2020.12.02.06.17.47.args -vm_args /opt/emqx/data/configs/vm.2020.12.02.06.17.47.args -start_epmd false -epmd_module ekka_epmd -proto_dist ekka -- console 6 | Root: /opt/emqx 7 | /opt/emqx 8 | Starting emqx on node def2d8df4af4@172.17.0.5 9 | Start mqtt:tcp listener on 127.0.0.1:11883 successfully. 10 | Start mqtt:tcp listener on 0.0.0.0:1883 successfully. 11 | Start mqtt:ws listener on 0.0.0.0:8083 successfully. 12 | Start mqtt:ssl listener on 0.0.0.0:8883 successfully. 13 | Start mqtt:wss listener on 0.0.0.0:8084 successfully. 14 | Start http:management listener on 8081 successfully. 15 | Start http:dashboard listener on 18083 successfully. 16 | EMQ X Enterprise 4.2.1 is running now! 17 | Eshell V10.7.2.5 (abort with ^G) 18 | (def2d8df4af4@172.17.0.5)1> -------------------------------------------------------------------------------- /docs/docker/emqee/log/run_erl.log: -------------------------------------------------------------------------------- 1 | run_erl [5045] Wed Dec 2 06:17:46 2020 2 | Args before exec of shell: 3 | run_erl [5045] Wed Dec 2 06:17:46 2020 4 | argv[0] = sh 5 | run_erl [5045] Wed Dec 2 06:17:46 2020 6 | argv[1] = -c 7 | run_erl [5045] Wed Dec 2 06:17:46 2020 8 | argv[2] = exec "/opt/emqx/bin/emqx" "console" 9 | -------------------------------------------------------------------------------- /docs/docker/emqee/read.md: -------------------------------------------------------------------------------- 1 | 在将start.sh复制到linux系统后赋予权限: 2 | 3 | chmod u+x *.sh 4 | 5 | 修改在windows和linux换行符不一致问题: 6 | 7 | sed -i "s/\r//" start.sh 8 | 9 | mysql容器查看ip: 10 | docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql 11 | 12 | 13 | 在使用权限插件emqx_auth_mysql时配置文件中的auth.mysql.server地址一定要改 14 | 15 | 如果mysql在本机就写本机的ip 一定不能用127.0.0.1 -------------------------------------------------------------------------------- /docs/docker/emqee/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | docker stop emqx 4 | docker rm emqx 5 | docker run -d --name emqx --restart=always \ 6 | -p 1883:1883 \ 7 | -p 8083:8083 \ 8 | -p 8883:8883 \ 9 | -p 8084:8084 \ 10 | -p 18083:18083 \ 11 | -v `pwd`/license/emqx.lic:/opt/emqx/etc/emqx.lic \ 12 | -v `pwd`/etc/:/opt/emqx/etc \ 13 | -v `pwd`/log:/opt/emqx/log \ 14 | -v /etc/localtime:/etc/localtime \ 15 | -u root emqx/emqx-ee:4.2.1 -------------------------------------------------------------------------------- /docs/docker/emqx/data/loaded_plugins: -------------------------------------------------------------------------------- 1 | {emqx_management,true}. 2 | {emqx_recon,true}. 3 | {emqx_retainer,true}. 4 | {emqx_dashboard,true}. 5 | {emqx_rule_engine,true}. 6 | {emqx_bridge_mqtt,false}. 7 | {emqx_auth_mysql,true}. -------------------------------------------------------------------------------- /docs/docker/emqx/etc/acl.conf: -------------------------------------------------------------------------------- 1 | %%-------------------------------------------------------------------- 2 | %% [ACL](https://docs.emqx.io/broker/v3/en/config.html) 3 | %% 4 | %% -type(who() :: all | binary() | 5 | %% {ipaddr, esockd_access:cidr()} | 6 | %% {client, binary()} | 7 | %% {user, binary()}). 8 | %% 9 | %% -type(access() :: subscribe | publish | pubsub). 10 | %% 11 | %% -type(topic() :: binary()). 12 | %% 13 | %% -type(rule() :: {allow, all} | 14 | %% {allow, who(), access(), list(topic())} | 15 | %% {deny, all} | 16 | %% {deny, who(), access(), list(topic())}). 17 | %%-------------------------------------------------------------------- 18 | 19 | {allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}. 20 | 21 | {allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}. 22 | 23 | {deny, all, subscribe, ["$SYS/#", {eq, "#"}]}. 24 | 25 | {allow, all, pubsub, ["$SYS/#","#"]}. 26 | 27 | {allow, all}. 28 | 29 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/certs/README: -------------------------------------------------------------------------------- 1 | Place your SSL/TLS Certificates here. 2 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/certs/cacert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDUTCCAjmgAwIBAgIJAPPYCjTmxdt/MA0GCSqGSIb3DQEBCwUAMD8xCzAJBgNV 3 | BAYTAkNOMREwDwYDVQQIDAhoYW5nemhvdTEMMAoGA1UECgwDRU1RMQ8wDQYDVQQD 4 | DAZSb290Q0EwHhcNMjAwNTA4MDgwNjUyWhcNMzAwNTA2MDgwNjUyWjA/MQswCQYD 5 | VQQGEwJDTjERMA8GA1UECAwIaGFuZ3pob3UxDDAKBgNVBAoMA0VNUTEPMA0GA1UE 6 | AwwGUm9vdENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzcgVLex1 7 | EZ9ON64EX8v+wcSjzOZpiEOsAOuSXOEN3wb8FKUxCdsGrsJYB7a5VM/Jot25Mod2 8 | juS3OBMg6r85k2TWjdxUoUs+HiUB/pP/ARaaW6VntpAEokpij/przWMPgJnBF3Ur 9 | MjtbLayH9hGmpQrI5c2vmHQ2reRZnSFbY+2b8SXZ+3lZZgz9+BaQYWdQWfaUWEHZ 10 | uDaNiViVO0OT8DRjCuiDp3yYDj3iLWbTA/gDL6Tf5XuHuEwcOQUrd+h0hyIphO8D 11 | tsrsHZ14j4AWYLk1CPA6pq1HIUvEl2rANx2lVUNv+nt64K/Mr3RnVQd9s8bK+TXQ 12 | KGHd2Lv/PALYuwIDAQABo1AwTjAdBgNVHQ4EFgQUGBmW+iDzxctWAWxmhgdlE8Pj 13 | EbQwHwYDVR0jBBgwFoAUGBmW+iDzxctWAWxmhgdlE8PjEbQwDAYDVR0TBAUwAwEB 14 | /zANBgkqhkiG9w0BAQsFAAOCAQEAGbhRUjpIred4cFAFJ7bbYD9hKu/yzWPWkMRa 15 | ErlCKHmuYsYk+5d16JQhJaFy6MGXfLgo3KV2itl0d+OWNH0U9ULXcglTxy6+njo5 16 | CFqdUBPwN1jxhzo9yteDMKF4+AHIxbvCAJa17qcwUKR5MKNvv09C6pvQDJLzid7y 17 | E2dkgSuggik3oa0427KvctFf8uhOV94RvEDyqvT5+pgNYZ2Yfga9pD/jjpoHEUlo 18 | 88IGU8/wJCx3Ds2yc8+oBg/ynxG8f/HmCC1ET6EHHoe2jlo8FpU/SgGtghS1YL30 19 | IWxNsPrUP+XsZpBJy/mvOhE5QXo6Y35zDqqj8tI7AGmAWu22jg== 20 | -----END CERTIFICATE----- 21 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/certs/cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDEzCCAfugAwIBAgIBAjANBgkqhkiG9w0BAQsFADA/MQswCQYDVQQGEwJDTjER 3 | MA8GA1UECAwIaGFuZ3pob3UxDDAKBgNVBAoMA0VNUTEPMA0GA1UEAwwGUm9vdENB 4 | MB4XDTIwMDUwODA4MDcwNVoXDTMwMDUwNjA4MDcwNVowPzELMAkGA1UEBhMCQ04x 5 | ETAPBgNVBAgMCGhhbmd6aG91MQwwCgYDVQQKDANFTVExDzANBgNVBAMMBlNlcnZl 6 | cjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALNeWT3pE+QFfiRJzKmn 7 | AMUrWo3K2j/Tm3+Xnl6WLz67/0rcYrJbbKvS3uyRP/stXyXEKw9CepyQ1ViBVFkW 8 | Aoy8qQEOWFDsZc/5UzhXUnb6LXr3qTkFEjNmhj+7uzv/lbBxlUG1NlYzSeOB6/RT 9 | 8zH/lhOeKhLnWYPXdXKsa1FL6ij4X8DeDO1kY7fvAGmBn/THh1uTpDizM4YmeI+7 10 | 4dmayA5xXvARte5h4Vu5SIze7iC057N+vymToMk2Jgk+ZZFpyXrnq+yo6RaD3ANc 11 | lrc4FbeUQZ5a5s5Sxgs9a0Y3WMG+7c5VnVXcbjBRz/aq2NtOnQQjikKKQA8GF080 12 | BQkCAwEAAaMaMBgwCQYDVR0TBAIwADALBgNVHQ8EBAMCBeAwDQYJKoZIhvcNAQEL 13 | BQADggEBAJefnMZpaRDHQSNUIEL3iwGXE9c6PmIsQVE2ustr+CakBp3TZ4l0enLt 14 | iGMfEVFju69cO4oyokWv+hl5eCMkHBf14Kv51vj448jowYnF1zmzn7SEzm5Uzlsa 15 | sqjtAprnLyof69WtLU1j5rYWBuFX86yOTwRAFNjm9fvhAcrEONBsQtqipBWkMROp 16 | iUYMkRqbKcQMdwxov+lHBYKq9zbWRoqLROAn54SRqgQk6c15JdEfgOOjShbsOkIH 17 | UhqcwRkQic7n1zwHVGVDgNIZVgmJ2IdIWBlPEC7oLrRrBD/X1iEEXtKab6p5o22n 18 | KB5mN+iQaE+Oe2cpGKZJiJRdM+IqDDQ= 19 | -----END CERTIFICATE----- 20 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/certs/client-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDEzCCAfugAwIBAgIBATANBgkqhkiG9w0BAQsFADA/MQswCQYDVQQGEwJDTjER 3 | MA8GA1UECAwIaGFuZ3pob3UxDDAKBgNVBAoMA0VNUTEPMA0GA1UEAwwGUm9vdENB 4 | MB4XDTIwMDUwODA4MDY1N1oXDTMwMDUwNjA4MDY1N1owPzELMAkGA1UEBhMCQ04x 5 | ETAPBgNVBAgMCGhhbmd6aG91MQwwCgYDVQQKDANFTVExDzANBgNVBAMMBkNsaWVu 6 | dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMy4hoksKcZBDbY680u6 7 | TS25U51nuB1FBcGMlF9B/t057wPOlxF/OcmbxY5MwepS41JDGPgulE1V7fpsXkiW 8 | 1LUimYV/tsqBfymIe0mlY7oORahKji7zKQ2UBIVFhdlvQxunlIDnw6F9popUgyHt 9 | dMhtlgZK8oqRwHxO5dbfoukYd6J/r+etS5q26sgVkf3C6dt0Td7B25H9qW+f7oLV 10 | PbcHYCa+i73u9670nrpXsC+Qc7Mygwa2Kq/jwU+ftyLQnOeW07DuzOwsziC/fQZa 11 | nbxR+8U9FNftgRcC3uP/JMKYUqsiRAuaDokARZxVTV5hUElfpO6z6/NItSDvvh3i 12 | eikCAwEAAaMaMBgwCQYDVR0TBAIwADALBgNVHQ8EBAMCBeAwDQYJKoZIhvcNAQEL 13 | BQADggEBABchYxKo0YMma7g1qDswJXsR5s56Czx/I+B41YcpMBMTrRqpUC0nHtLk 14 | M7/tZp592u/tT8gzEnQjZLKBAhFeZaR3aaKyknLqwiPqJIgg0pgsBGITrAK3Pv4z 15 | 5/YvAJJKgTe5UdeTz6U4lvNEux/4juZ4pmqH4qSFJTOzQS7LmgSmNIdd072rwXBd 16 | UzcSHzsJgEMb88u/LDLjj1pQ7AtZ4Tta8JZTvcgBFmjB0QUi6fgkHY6oGat/W4kR 17 | jSRUBlMUbM/drr2PVzRc2dwbFIl3X+ZE6n5Sl3ZwRAC/s92JU6CPMRW02muVu6xl 18 | goraNgPISnrbpR6KjxLZkVembXzjNNc= 19 | -----END CERTIFICATE----- 20 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/certs/client-key.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEpAIBAAKCAQEAzLiGiSwpxkENtjrzS7pNLblTnWe4HUUFwYyUX0H+3TnvA86X 3 | EX85yZvFjkzB6lLjUkMY+C6UTVXt+mxeSJbUtSKZhX+2yoF/KYh7SaVjug5FqEqO 4 | LvMpDZQEhUWF2W9DG6eUgOfDoX2milSDIe10yG2WBkryipHAfE7l1t+i6Rh3on+v 5 | 561LmrbqyBWR/cLp23RN3sHbkf2pb5/ugtU9twdgJr6Lve73rvSeulewL5BzszKD 6 | BrYqr+PBT5+3ItCc55bTsO7M7CzOIL99BlqdvFH7xT0U1+2BFwLe4/8kwphSqyJE 7 | C5oOiQBFnFVNXmFQSV+k7rPr80i1IO++HeJ6KQIDAQABAoIBAGWgvPjfuaU3qizq 8 | uti/FY07USz0zkuJdkANH6LiSjlchzDmn8wJ0pApCjuIE0PV/g9aS8z4opp5q/gD 9 | UBLM/a8mC/xf2EhTXOMrY7i9p/I3H5FZ4ZehEqIw9sWKK9YzC6dw26HabB2BGOnW 10 | 5nozPSQ6cp2RGzJ7BIkxSZwPzPnVTgy3OAuPOiJytvK+hGLhsNaT+Y9bNDvplVT2 11 | ZwYTV8GlHZC+4b2wNROILm0O86v96O+Qd8nn3fXjGHbMsAnONBq10bZS16L4fvkH 12 | 5G+W/1PeSXmtZFppdRRDxIW+DWcXK0D48WRliuxcV4eOOxI+a9N2ZJZZiNLQZGwg 13 | w3A8+mECgYEA8HuJFrlRvdoBe2U/EwUtG74dcyy30L4yEBnN5QscXmEEikhaQCfX 14 | Wm6EieMcIB/5I5TQmSw0cmBMeZjSXYoFdoI16/X6yMMuATdxpvhOZGdUGXxhAH+x 15 | xoTUavWZnEqW3fkUU71kT5E2f2i+0zoatFESXHeslJyz85aAYpP92H0CgYEA2e5A 16 | Yozt5eaA1Gyhd8SeptkEU4xPirNUnVQHStpMWUb1kzTNXrPmNWccQ7JpfpG6DcYl 17 | zUF6p6mlzY+zkMiyPQjwEJlhiHM2NlL1QS7td0R8ewgsFoyn8WsBI4RejWrEG9td 18 | EDniuIw+pBFkcWthnTLHwECHdzgquToyTMjrBB0CgYEA28tdGbrZXhcyAZEhHAZA 19 | Gzog+pKlkpEzeonLKIuGKzCrEKRecIK5jrqyQsCjhS0T7ZRnL4g6i0s+umiV5M5w 20 | fcc292pEA1h45L3DD6OlKplSQVTv55/OYS4oY3YEJtf5mfm8vWi9lQeY8sxOlQpn 21 | O+VZTdBHmTC8PGeTAgZXHZUCgYA6Tyv88lYowB7SN2qQgBQu8jvdGtqhcs/99GCr 22 | H3N0I69LPsKAR0QeH8OJPXBKhDUywESXAaEOwS5yrLNP1tMRz5Vj65YUCzeDG3kx 23 | gpvY4IMp7ArX0bSRvJ6mYSFnVxy3k174G3TVCfksrtagHioVBGQ7xUg5ltafjrms 24 | n8l55QKBgQDVzU8tQvBVqY8/1lnw11Vj4fkE/drZHJ5UkdC1eenOfSWhlSLfUJ8j 25 | ds7vEWpRPPoVuPZYeR1y78cyxKe1GBx6Wa2lF5c7xjmiu0xbRnrxYeLolce9/ntp 26 | asClqpnHT8/VJYTD7Kqj0fouTTZf0zkig/y+2XERppd8k+pSKjUCPQ== 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/certs/key.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEowIBAAKCAQEAs15ZPekT5AV+JEnMqacAxStajcraP9Obf5eeXpYvPrv/Stxi 3 | sltsq9Le7JE/+y1fJcQrD0J6nJDVWIFUWRYCjLypAQ5YUOxlz/lTOFdSdvotevep 4 | OQUSM2aGP7u7O/+VsHGVQbU2VjNJ44Hr9FPzMf+WE54qEudZg9d1cqxrUUvqKPhf 5 | wN4M7WRjt+8AaYGf9MeHW5OkOLMzhiZ4j7vh2ZrIDnFe8BG17mHhW7lIjN7uILTn 6 | s36/KZOgyTYmCT5lkWnJeuer7KjpFoPcA1yWtzgVt5RBnlrmzlLGCz1rRjdYwb7t 7 | zlWdVdxuMFHP9qrY206dBCOKQopADwYXTzQFCQIDAQABAoIBAQCuvCbr7Pd3lvI/ 8 | n7VFQG+7pHRe1VKwAxDkx2t8cYos7y/QWcm8Ptwqtw58HzPZGWYrgGMCRpzzkRSF 9 | V9g3wP1S5Scu5C6dBu5YIGc157tqNGXB+SpdZddJQ4Nc6yGHXYERllT04ffBGc3N 10 | WG/oYS/1cSteiSIrsDy/91FvGRCi7FPxH3wIgHssY/tw69s1Cfvaq5lr2NTFzxIG 11 | xCvpJKEdSfVfS9I7LYiymVjst3IOR/w76/ZFY9cRa8ZtmQSWWsm0TUpRC1jdcbkm 12 | ZoJptYWlP+gSwx/fpMYftrkJFGOJhHJHQhwxT5X/ajAISeqjjwkWSEJLwnHQd11C 13 | Zy2+29lBAoGBANlEAIK4VxCqyPXNKfoOOi5dS64NfvyH4A1v2+KaHWc7lqaqPN49 14 | ezfN2n3X+KWx4cviDD914Yc2JQ1vVJjSaHci7yivocDo2OfZDmjBqzaMp/y+rX1R 15 | /f3MmiTqMa468rjaxI9RRZu7vDgpTR+za1+OBCgMzjvAng8dJuN/5gjlAoGBANNY 16 | uYPKtearBmkqdrSV7eTUe49Nhr0XotLaVBH37TCW0Xv9wjO2xmbm5Ga/DCtPIsBb 17 | yPeYwX9FjoasuadUD7hRvbFu6dBa0HGLmkXRJZTcD7MEX2Lhu4BuC72yDLLFd0r+ 18 | Ep9WP7F5iJyagYqIZtz+4uf7gBvUDdmvXz3sGr1VAoGAdXTD6eeKeiI6PlhKBztF 19 | zOb3EQOO0SsLv3fnodu7ZaHbUgLaoTMPuB17r2jgrYM7FKQCBxTNdfGZmmfDjlLB 20 | 0xZ5wL8ibU30ZXL8zTlWPElST9sto4B+FYVVF/vcG9sWeUUb2ncPcJ/Po3UAktDG 21 | jYQTTyuNGtSJHpad/YOZctkCgYBtWRaC7bq3of0rJGFOhdQT9SwItN/lrfj8hyHA 22 | OjpqTV4NfPmhsAtu6j96OZaeQc+FHvgXwt06cE6Rt4RG4uNPRluTFgO7XYFDfitP 23 | vCppnoIw6S5BBvHwPP+uIhUX2bsi/dm8vu8tb+gSvo4PkwtFhEr6I9HglBKmcmog 24 | q6waEQKBgHyecFBeM6Ls11Cd64vborwJPAuxIW7HBAFj/BS99oeG4TjBx4Sz2dFd 25 | rzUibJt4ndnHIvCN8JQkjNG14i9hJln+H3mRss8fbZ9vQdqG+2vOWADYSzzsNI55 26 | RFY7JjluKcVkp/zCDeUxTU3O6sS+v6/3VE11Cob6OYQx3lN5wrZ3 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/plugins/acl.conf.paho: -------------------------------------------------------------------------------- 1 | %%-------------------------------------------------------------------- 2 | %% For paho interoperability test cases 3 | %%-------------------------------------------------------------------- 4 | 5 | {deny, {client, "myclientid"}, subscribe, ["test/nosubscribe"]}. 6 | 7 | {allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}. 8 | 9 | {allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}. 10 | 11 | {deny, all, subscribe, ["$SYS/#", {eq, "#"}]}. 12 | 13 | {allow, all}. 14 | 15 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/plugins/emqx_auth_clientid.conf: -------------------------------------------------------------------------------- 1 | ##-------------------------------------------------------------------- 2 | ## ClientId Authentication Plugin 3 | ##-------------------------------------------------------------------- 4 | 5 | ## Examples 6 | ##auth.client.1.clientid = id 7 | ##auth.client.1.password = passwd 8 | ##auth.client.2.clientid = dev:devid 9 | ##auth.client.2.password = passwd2 10 | ##auth.client.3.clientid = app:appid 11 | ##auth.client.3.password = passwd3 12 | ##auth.client.4.clientid = client~!@#$%^&*()_+ 13 | ##auth.client.4.password = passwd~!@#$%^&*()_+ 14 | 15 | ## Password hash. 16 | ## 17 | ## Value: plain | md5 | sha | sha256 18 | auth.client.password_hash = sha256 19 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/plugins/emqx_auth_jwt.conf: -------------------------------------------------------------------------------- 1 | ##-------------------------------------------------------------------- 2 | ## JWT Auth Plugin 3 | ##-------------------------------------------------------------------- 4 | 5 | ## HMAC Hash Secret. 6 | ## 7 | ## Value: String 8 | auth.jwt.secret = jwt_secret 9 | 10 | ## From where the JWT string can be got 11 | ## 12 | ## Value: username | password 13 | ## Default: password 14 | auth.jwt.from = password 15 | 16 | ## RSA or ECDSA public key file. 17 | ## 18 | ## Value: File 19 | ## auth.jwt.pubkey = etc/certs/jwt_public_key.pem 20 | 21 | ## Enable to verify claims fields 22 | ## 23 | ## Value: on | off 24 | auth.jwt.verify_claims = on 25 | 26 | ## The checklist of claims to validate 27 | ## 28 | ## Value: String 29 | ## auth.jwt.verify_claims.$name = expected 30 | ## 31 | ## Variables: 32 | ## - %u: username 33 | ## - %c: clientid 34 | # auth.jwt.verify_claims.username = %u 35 | 36 | ## The Signature format 37 | ## - `der`: The erlang default format 38 | ## - `raw`: Compatible with others platform maybe 39 | #auth.jwt.signature_format = der 40 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/plugins/emqx_auth_ldap.conf: -------------------------------------------------------------------------------- 1 | ##-------------------------------------------------------------------- 2 | ## LDAP Auth Plugin 3 | ##-------------------------------------------------------------------- 4 | 5 | ## LDAP server list, seperated by ','. 6 | ## 7 | ## Value: String 8 | auth.ldap.servers = 127.0.0.1 9 | 10 | ## LDAP server port. 11 | ## 12 | ## Value: Port 13 | auth.ldap.port = 389 14 | 15 | ## LDAP pool size 16 | ## 17 | ## Value: String 18 | auth.ldap.pool = 8 19 | 20 | ## LDAP Bind DN. 21 | ## 22 | ## Value: DN 23 | auth.ldap.bind_dn = cn=root,dc=emqx,dc=io 24 | 25 | ## LDAP Bind Password. 26 | ## 27 | ## Value: String 28 | auth.ldap.bind_password = public 29 | 30 | ## LDAP query timeout. 31 | ## 32 | ## Value: Number 33 | auth.ldap.timeout = 30s 34 | 35 | ## Device DN. 36 | ## 37 | ## Variables: 38 | ## 39 | ## Value: DN 40 | auth.ldap.device_dn = ou=device,dc=emqx,dc=io 41 | 42 | ## Specified ObjectClass 43 | ## 44 | ## Variables: 45 | ## 46 | ## Value: string 47 | auth.ldap.match_objectclass = mqttUser 48 | 49 | ## attributetype for username 50 | ## 51 | ## Variables: 52 | ## 53 | ## Value: string 54 | auth.ldap.username.attributetype = uid 55 | 56 | ## attributetype for password 57 | ## 58 | ## Variables: 59 | ## 60 | ## Value: string 61 | auth.ldap.password.attributetype = userPassword 62 | 63 | ## Whether to enable SSL. 64 | ## 65 | ## Value: true | false 66 | auth.ldap.ssl = false 67 | 68 | #auth.ldap.ssl.certfile = etc/certs/cert.pem 69 | 70 | #auth.ldap.ssl.keyfile = etc/certs/key.pem 71 | 72 | #auth.ldap.ssl.cacertfile = etc/certs/cacert.pem 73 | 74 | #auth.ldap.ssl.verify = verify_peer 75 | 76 | #auth.ldap.ssl.fail_if_no_peer_cert = true 77 | 78 | #auth.ldap.ssl.server_name_indication = your_server_name 79 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/plugins/emqx_auth_mnesia.conf: -------------------------------------------------------------------------------- 1 | ## Examples: 2 | ##auth.mnesia.1.login = admin 3 | ##auth.mnesia.1.password = public 4 | ##auth.mnesia.1.is_superuser = true 5 | ##auth.mnesia.2.login = feng@emqtt.io 6 | ##auth.mnesia.2.password = public 7 | ##auth.mnesia.2.is_superuser = false 8 | ##auth.mnesia.3.login = name~!@#$%^&*()_+ 9 | ##auth.mnesia.3.password = pwsswd~!@#$%^&*()_+ 10 | ##auth.mnesia.3.is_superuser = false 11 | 12 | ## Password hash. 13 | ## 14 | ## Value: plain | md5 | sha | sha256 15 | auth.mnesia.password_hash = sha256 16 | 17 | ## Auth as username or auth as clientid. 18 | ## 19 | ## Value: username | clientid 20 | auth.mnesia.as = username 21 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/plugins/emqx_auth_username.conf: -------------------------------------------------------------------------------- 1 | ##-------------------------------------------------------------------- 2 | ## Username Authentication Plugin 3 | ##-------------------------------------------------------------------- 4 | 5 | ## Examples: 6 | ##auth.user.1.username = admin 7 | ##auth.user.1.password = public 8 | ##auth.user.2.username = feng@emqtt.io 9 | ##auth.user.2.password = public 10 | ##auth.user.3.username = name~!@#$%^&*()_+ 11 | ##auth.user.3.password = pwsswd~!@#$%^&*()_+ 12 | 13 | ## Password hash. 14 | ## 15 | ## Value: plain | md5 | sha | sha256 16 | auth.user.password_hash = sha256 17 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/plugins/emqx_extension_hook.conf: -------------------------------------------------------------------------------- 1 | ##==================================================================== 2 | ## EMQ X Hooks 3 | ##==================================================================== 4 | 5 | ##-------------------------------------------------------------------- 6 | ## Driver confs 7 | 8 | ## Setup the supported drivers 9 | ## 10 | ## Value: python3 | java 11 | exhook.drivers = python3 12 | 13 | ## Search path for scripts/library 14 | ## 15 | exhook.drivers.python3.path = data/extension/ 16 | 17 | ## Call timeout 18 | ## 19 | ## Value: Duration 20 | ##exhook.drivers.python3.call_timeout = 5s 21 | 22 | ## Initial module name 23 | ## 24 | ##exhook.drivers.python3.init_module = main 25 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/plugins/emqx_lua_hook.conf: -------------------------------------------------------------------------------- 1 | ##-------------------------------------------------------------------- 2 | ## EMQ X Lua Hook 3 | ##-------------------------------------------------------------------- 4 | 5 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/plugins/emqx_plugin_template.config: -------------------------------------------------------------------------------- 1 | 2 | [ 3 | {emqx_plugin_template, []} 4 | ]. 5 | 6 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/plugins/emqx_prometheus.conf: -------------------------------------------------------------------------------- 1 | ##-------------------------------------------------------------------- 2 | ## emqx_prometheus for EMQ X 3 | ##-------------------------------------------------------------------- 4 | 5 | ## The Prometheus Push Gateway URL address 6 | ## 7 | ## Note: You can comment out this line to disable it 8 | prometheus.push.gateway.server = http://127.0.0.1:9091 9 | 10 | ## The metrics data push interval (millisecond) 11 | ## 12 | ## Default: 15000 13 | prometheus.interval = 15000 14 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/plugins/emqx_psk_file.conf: -------------------------------------------------------------------------------- 1 | psk.file.path = etc/psk.txt 2 | psk.file.delimiter = : -------------------------------------------------------------------------------- /docs/docker/emqx/etc/plugins/emqx_recon.conf: -------------------------------------------------------------------------------- 1 | ##-------------------------------------------------------------------- 2 | ## Recon Plugin 3 | ##-------------------------------------------------------------------- 4 | 5 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/plugins/emqx_reloader.conf: -------------------------------------------------------------------------------- 1 | ##-------------------------------------------------------------------- 2 | ## Reloader Plugin 3 | ##-------------------------------------------------------------------- 4 | 5 | ## Interval of hot code reloading. 6 | ## 7 | ## Value: Duration 8 | ## - h: hour 9 | ## - m: minute 10 | ## - s: second 11 | ## 12 | ## Examples: 13 | ## - 2h: 2 hours 14 | ## - 30m: 30 minutes 15 | ## - 20s: 20 seconds 16 | ## 17 | ## Defaut: 60s 18 | reloader.interval = 60s 19 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/plugins/emqx_retainer.conf: -------------------------------------------------------------------------------- 1 | ##-------------------------------------------------------------------- 2 | ## EMQ X Retainer 3 | ##-------------------------------------------------------------------- 4 | 5 | ## Where to store the retained messages. 6 | ## 7 | ## Notice that all nodes in the same cluster have to be configured to 8 | ## use the same storage_type. 9 | ## 10 | ## Value: ram | disc | disc_only 11 | ## - ram: memory only 12 | ## - disc: both memory and disc 13 | ## - disc_only: disc only 14 | ## 15 | ## Default: ram 16 | retainer.storage_type = ram 17 | 18 | ## Maximum number of retained messages. 0 means no limit. 19 | ## 20 | ## Value: Number >= 0 21 | retainer.max_retained_messages = 0 22 | 23 | ## Maximum retained message size. 24 | ## 25 | ## Value: Bytes 26 | retainer.max_payload_size = 1MB 27 | 28 | ## Expiry interval of the retained messages. Never expire if the value is 0. 29 | ## 30 | ## Value: Duration 31 | ## - h: hour 32 | ## - m: minute 33 | ## - s: second 34 | ## 35 | ## Examples: 36 | ## - 2h: 2 hours 37 | ## - 30m: 30 minutes 38 | ## - 20s: 20 seconds 39 | ## 40 | ## Defaut: 0 41 | retainer.expiry_interval = 0 42 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/plugins/emqx_rule_engine.conf: -------------------------------------------------------------------------------- 1 | ##==================================================================== 2 | ## Rule Engine for EMQ X R4.0 3 | ##==================================================================== 4 | 5 | rule_engine.ignore_sys_message = on 6 | 7 | ## Event Messages 8 | ## 9 | ## If enabled (on), rule engine publishes the event as an MQTT message 10 | ## with topic='$events/' on the occurrence of an emqx event. 11 | ## 12 | ## If disabled, rule engine stops publishing the event messages, but 13 | ## the event message can still be processed by the rule SQL. e.g. rule SQL: 14 | ## 15 | ## SELECT * FROM "$events/client_connected" 16 | ## 17 | ## will still work even if 'rule_engine.events.client_connected' is set to 'off' 18 | ## 19 | ## EMQ Event to event message mapping: 20 | ## 21 | ## - client.connected -> $events/client_connected 22 | ## - client.disconnected -> $events/client_disconnected 23 | ## - session.subscribed -> $events/session_subscribed 24 | ## - session.unsubscribed -> $events/session_unsubscribed 25 | ## - message.delivered -> $events/message_delivered 26 | ## - message.acked -> $events/message_acked 27 | ## - message.dropped -> $events/message_dropped 28 | ## 29 | ## Config Value Format: Toggle, QoS-Level 30 | ## 31 | ## Toggle: on/off 32 | ## 33 | ## QoS-Level: qos0/qos1/qos2 34 | 35 | #rule_engine.events.client_connected = on, qos1 36 | rule_engine.events.client_connected = off 37 | rule_engine.events.client_disconnected = off 38 | rule_engine.events.session_subscribed = off 39 | rule_engine.events.session_unsubscribed = off 40 | rule_engine.events.message_delivered = off 41 | rule_engine.events.message_acked = off 42 | rule_engine.events.message_dropped = off 43 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/plugins/emqx_sasl.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/emqx/etc/plugins/emqx_sasl.conf -------------------------------------------------------------------------------- /docs/docker/emqx/etc/plugins/emqx_sn.conf: -------------------------------------------------------------------------------- 1 | ##-------------------------------------------------------------------- 2 | ## MQTT-SN 3 | ##-------------------------------------------------------------------- 4 | 5 | ## The UDP port which emq-sn is listening on. 6 | ## 7 | ## Value: IP:Port | Port 8 | ## 9 | ## Examples: 1884, 127.0.0.1:1884, ::1:1884 10 | mqtt.sn.port = 1884 11 | 12 | ## The duration that emqx-sn broadcast ADVERTISE message through. 13 | ## 14 | ## Value: Duration 15 | mqtt.sn.advertise_duration = 15m 16 | 17 | ## The MQTT-SN Gateway id in ADVERTISE message. 18 | ## 19 | ## Value: Number 20 | mqtt.sn.gateway_id = 1 21 | 22 | ## To control whether write statistics data into ETS table for dashbord to read. 23 | ## 24 | ## Value: on | off 25 | mqtt.sn.enable_stats = off 26 | 27 | ## To control whether accept and process the received publish message with qos=-1. 28 | ## 29 | ## Value: on | off 30 | mqtt.sn.enable_qos3 = off 31 | 32 | ## MQTT SN idle timeout, specified in seconds. 33 | ## 34 | ## Value: Duration 35 | mqtt.sn.idle_timeout = 30s 36 | 37 | ## The pre-defined topic name corresponding to the pre-defined topic id of N. 38 | ## Note that the pre-defined topic id of 0 is reserved. 39 | mqtt.sn.predefined.topic.0 = reserved 40 | mqtt.sn.predefined.topic.1 = /predefined/topic/name/hello 41 | mqtt.sn.predefined.topic.2 = /predefined/topic/name/nice 42 | 43 | ## Default username for MQTT-SN. This parameter is optional. If specified, 44 | ## emq-sn will connect EMQ core with this username. It is useful if any auth 45 | ## plug-in is enabled. 46 | ## 47 | ## Value: String 48 | mqtt.sn.username = mqtt_sn_user 49 | 50 | ## This parameter is optional. Pair with username above. 51 | ## 52 | ## Value: String 53 | mqtt.sn.password = abc 54 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/plugins/emqx_telemetry.conf: -------------------------------------------------------------------------------- 1 | ##-------------------------------------------------------------------- 2 | ## Telemetry 3 | ##-------------------------------------------------------------------- 4 | 5 | ## Enable telemetry 6 | ## 7 | ## Value: true | false 8 | ## 9 | ## Default: true 10 | telemetry.enabled = true 11 | 12 | ## The destination URL for the telemetry data report 13 | ## 14 | ## Value: String 15 | ## 16 | ## Default: https://telemetry.emqx.io/api/telemetry 17 | telemetry.url = https://telemetry.emqx.io/api/telemetry 18 | 19 | ## Interval for reporting telemetry data 20 | ## 21 | ## Value: Duration 22 | ## -d: day 23 | ## -h: hour 24 | ## -m: minute 25 | ## -s: second 26 | ## 27 | ## Default: 7d 28 | telemetry.report_interval = 7d -------------------------------------------------------------------------------- /docs/docker/emqx/etc/psk.txt: -------------------------------------------------------------------------------- 1 | client1:1234 2 | client2:abcd 3 | -------------------------------------------------------------------------------- /docs/docker/emqx/etc/ssl_dist.conf: -------------------------------------------------------------------------------- 1 | %% The options in the {server, Opts} tuple are used when calling ssl:ssl_accept/3, 2 | %% and the options in the {client, Opts} tuple are used when calling ssl:connect/4. 3 | %% 4 | %% More information at: http://erlang.org/doc/apps/ssl/ssl_distribution.html 5 | [{server, 6 | [{certfile, "etc/certs/cert.pem"}, 7 | {keyfile, "etc/certs/key.pem"}, 8 | {secure_renegotiate, true}, 9 | {depth, 0}]}, 10 | {client, 11 | [{secure_renegotiate, true}]}]. 12 | -------------------------------------------------------------------------------- /docs/docker/emqx/log/emqx.log.1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/emqx/log/emqx.log.1 -------------------------------------------------------------------------------- /docs/docker/emqx/log/emqx.log.idx: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /docs/docker/emqx/log/emqx.log.siz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/emqx/log/emqx.log.siz -------------------------------------------------------------------------------- /docs/docker/emqx/log/erlang.log.1: -------------------------------------------------------------------------------- 1 | 2 | ===== 3 | ===== LOGGING STARTED Wed Dec 2 06:41:00 UTC 2020 4 | ===== 5 | Exec: /opt/emqx/erts-10.7.2.1/bin/erlexec -boot /opt/emqx/releases/4.2.3/emqx -mode embedded -boot_var ERTS_LIB_DIR /opt/emqx/erts-10.7.2.1/../lib -mnesia dir "/opt/emqx/data/mnesia/b3747e98315c@172.17.0.5" -config /opt/emqx/data/configs/app.2020.12.02.06.41.01.config -args_file /opt/emqx/data/configs/vm.2020.12.02.06.41.01.args -vm_args /opt/emqx/data/configs/vm.2020.12.02.06.41.01.args -start_epmd false -epmd_module ekka_epmd -proto_dist ekka -- console 6 | Root: /opt/emqx 7 | /opt/emqx 8 | Starting emqx on node b3747e98315c@172.17.0.5 9 | Start http:management listener on 8081 successfully. 10 | Start http:dashboard listener on 18083 successfully. 11 | Start mqtt:tcp listener on 127.0.0.1:11883 successfully. 12 | Start mqtt:tcp listener on 0.0.0.0:1883 successfully. 13 | Start mqtt:ws listener on 0.0.0.0:8083 successfully. 14 | Start mqtt:ssl listener on 0.0.0.0:8883 successfully. 15 | Start mqtt:wss listener on 0.0.0.0:8084 successfully. 16 | EMQ X Broker 4.2.3 is running now! 17 | Eshell V10.7.2.1 (abort with ^G) 18 | (b3747e98315c@172.17.0.5)1> -------------------------------------------------------------------------------- /docs/docker/emqx/log/run_erl.log: -------------------------------------------------------------------------------- 1 | run_erl [3303] Wed Dec 2 06:41:00 2020 2 | Args before exec of shell: 3 | run_erl [3303] Wed Dec 2 06:41:00 2020 4 | argv[0] = sh 5 | run_erl [3303] Wed Dec 2 06:41:00 2020 6 | argv[1] = -c 7 | run_erl [3303] Wed Dec 2 06:41:00 2020 8 | argv[2] = exec "/opt/emqx/bin/emqx" "console" 9 | -------------------------------------------------------------------------------- /docs/docker/emqx/read.md: -------------------------------------------------------------------------------- 1 | 在将start.sh复制到linux系统后赋予权限: 2 | 修改在windows和linux换行符不一致问题: 3 | chmod u+x *.sh 4 | sed -i "s/\r//" *.sh 5 | 6 | mysql容器查看ip: 7 | docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql 8 | 9 | 10 | 在使用权限插件emqx_auth_mysql时配置文件中的auth.mysql.server地址一定要改 11 | 12 | 如果mysql在本机就写本机的ip 一定不能用127.0.0.1 -------------------------------------------------------------------------------- /docs/docker/emqx/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | docker stop emqx 4 | docker rm emqx 5 | docker run -d --name emqx --restart=always \ 6 | -p 1883:1883 \ 7 | -p 8083:8083 \ 8 | -p 8883:8883 \ 9 | -p 8084:8084 \ 10 | -p 8081:8081 \ 11 | -p 18083:18083 \ 12 | -v `pwd`/etc:/opt/emqx/etc \ 13 | -v `pwd`/log:/opt/emqx/log \ 14 | -v `pwd`/css/app.1495f134b9420661c25a03fc6be1c155.css:/opt/emqx/lib/emqx_dashboard-4.2.3/priv/www/static/css/app.1495f134b9420661c25a03fc6be1c155.css \ 15 | -v `pwd`/data/loaded_plugins:/opt/emqx/data/loaded_plugins \ 16 | -e EMQX_NAME=emqx \ 17 | -v /etc/localtime:/etc/localtime \ 18 | --privileged=true \ 19 | -u root emqx/emqx:4.2.3 20 | -------------------------------------------------------------------------------- /docs/docker/gitlab/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | docker stop gitlab 4 | docker rm gitlab 5 | 6 | docker run -d \ 7 | -p 8443:443 -p 9003:9003 -p 222:22 \ 8 | --name gitlab --restart always \ 9 | -v `pwd`/config:/etc/gitlab \ 10 | -v `pwd`/logs:/var/log/gitlab \ 11 | -v `pwd`/data:/var/opt/gitlab \ 12 | --privileged=true beginor/gitlab-ce:11.3.0-ce.0 -------------------------------------------------------------------------------- /docs/docker/gitlab/指导.md: -------------------------------------------------------------------------------- 1 | 2 | # 修改配置 3 | vim `pwd`/config/gitlab.rb 4 | ``` 5 | # 配置http协议所使用的访问地址,不加端口号默认为80 6 | external_url 'http://106.53.26.9:9003' 7 | 8 | # 配置ssh协议所使用的访问地址和端口 9 | gitlab_rails['gitlab_ssh_host'] = '106.53.26.9' 10 | gitlab_rails['gitlab_shell_ssh_port'] = 222 11 | gitlab_rails['time_zone'] = 'Asia/Shanghai' 12 | 13 | unicorn['worker_processes'] = 2 14 | unicorn['worker_memory_limit_min'] = "200 * 1 << 20" 15 | unicorn['worker_memory_limit_max'] = "300 * 1 << 20" 16 | 17 | ### Email Settings 18 | gitlab_rails['smtp_enable'] = true # 开启 SMTP 功能 19 | gitlab_rails['smtp_address'] = "smtp.sina.com" 20 | gitlab_rails['smtp_port'] = 465 # sina 和 qq 都要配置 465 其他的不行 21 | gitlab_rails['smtp_user_name'] = "xxx@sina.com" # 你的邮箱账号 22 | gitlab_rails['smtp_password'] = "xxx" # 授权码,不是密码 23 | gitlab_rails['smtp_authentication'] = "login" 24 | gitlab_rails['smtp_enable_starttls_auto'] = true 25 | gitlab_rails['smtp_tls'] = true 26 | gitlab_rails['gitlab_email_from'] = 'xxx@sina.com' # 发件人信息,必须跟‘smtp_user_name’保持一致,否则报错 27 | gitlab_rails['smtp_domain'] = "sina.com" # 修改并不影响 28 | ``` 29 | 30 | 参考:http://help.sina.com.cn/comquestiondetail/view/160/ 31 | -------------------------------------------------------------------------------- /docs/docker/haproxy/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | docker stop haproxy 4 | docker rm haproxy 5 | 6 | docker run --name haproxy \ 7 | -e LANG=en_US.UTF-8 \ 8 | -v `pwd`/conf/haproxy.cfg:/etc/haproxy/haproxy.cfg \ 9 | --restart=always \ 10 | --net host \ 11 | -d haproxy:latest -------------------------------------------------------------------------------- /docs/docker/mongo/conf/mongodb.conf: -------------------------------------------------------------------------------- 1 | storage: 2 | dbPath: "/data/db" 3 | journal: 4 | enabled: true 5 | systemLog: 6 | destination: file 7 | path: "/data/log/mongod.log" 8 | logAppend: true 9 | net: 10 | bindIp: localhost,0.0.0.0 11 | port: 27017 -------------------------------------------------------------------------------- /docs/docker/mongo/mongodb.md: -------------------------------------------------------------------------------- 1 | chmod u+x *.sh 2 | sed -i "s/\r//" start.sh 3 | 4 | 1.运行start.sh 5 | 2.查看容器 docker ps |grep mongo 6 | 3.使用mongodb shell客户端 docker exec -it mongodb mongo admin 7 | 4.添加用户名密码 8 | db.createUser({user:'admin',pwd:'public',roles:[{role:'root',db:'admin'}]}) 9 | db.auth('admin', 'public') 10 | use iot 11 | db.createUser({user:'iot',pwd:'root',roles:[{role:'readWrite',db:'iot'}]}) 12 | 5.使用新创建的用户 db.auth('iot', 'root') -------------------------------------------------------------------------------- /docs/docker/mongo/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | cur_dir=`pwd` 3 | mkdir `pwd`/data 4 | docker stop mongodb 5 | docker rm mongodb 6 | docker run --restart=always --name mongodb \ 7 | -p 27017:27017 \ 8 | -v `pwd`/data/:/data/db \ 9 | -v `pwd`/conf/:/data/configdb \ 10 | -v `pwd`/backup/:/data/backup \ 11 | -v `pwd`/log/:/data/log \ 12 | -d mongo --auth -------------------------------------------------------------------------------- /docs/docker/mycat/conf/auto-sharding-long.txt: -------------------------------------------------------------------------------- 1 | 2000001-4000000=1 2 | 0-2000000=0 3 | 4000001-8000000=2 4 | -------------------------------------------------------------------------------- /docs/docker/mycat/conf/auto-sharding-rang-mod.txt: -------------------------------------------------------------------------------- 1 | 800M1-1000M=6 2 | 600M1-800M=4 3 | 200M1-400M=1 4 | 0-200M=5 5 | 400M1-600M=4 6 | -------------------------------------------------------------------------------- /docs/docker/mycat/conf/autopartition-long.txt: -------------------------------------------------------------------------------- 1 | # range start-end ,data node index 2 | # K=1000,M=10000. 3 | 0-500M=0 4 | 500M-1000M=1 5 | 1000M-1500M=2 -------------------------------------------------------------------------------- /docs/docker/mycat/conf/cacheservice.properties: -------------------------------------------------------------------------------- 1 | #used for mycat cache service conf 2 | factory.encache=io.mycat.cache.impl.EnchachePooFactory 3 | #key is pool name ,value is type,max size, expire seconds 4 | pool.SQLRouteCache=encache,10000,1800 5 | pool.ER_SQL2PARENTID=encache,1000,1800 6 | layedpool.TableID2DataNodeCache=encache,10000,18000 7 | layedpool.TableID2DataNodeCache.TESTDB_ORDERS=50000,18000 -------------------------------------------------------------------------------- /docs/docker/mycat/conf/ehcache.xml: -------------------------------------------------------------------------------- 1 | 4 | 8 | -------------------------------------------------------------------------------- /docs/docker/mycat/conf/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | 11 | %d{yyyy-MM-dd HH:mm:ss.SSS} %5p [%t] (%l) - %m%n 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /docs/docker/mycat/conf/migrateTables.properties: -------------------------------------------------------------------------------- 1 | #schema1=tb1,tb2,... 2 | #schema2=all(写all或者不写将对此schema下拆分节点变化的拆分表全部进行重新路由) 3 | #... 4 | 5 | #sample 6 | #TESTDB=travelrecord,company,goods -------------------------------------------------------------------------------- /docs/docker/mycat/conf/myid.properties: -------------------------------------------------------------------------------- 1 | loadZk=false 2 | zkURL=127.0.0.1:2181 3 | clusterId=mycat-cluster-1 4 | myid=mycat_fz_01 5 | clusterNodes=mycat_fz_01,mycat_fz_02,mycat_fz_04 6 | #server booster ; booster install on db same server,will reset all minCon to 1 7 | type=server 8 | boosterDataHosts=dn2,dn3 9 | -------------------------------------------------------------------------------- /docs/docker/mycat/conf/order-detail-id-node-partition.txt: -------------------------------------------------------------------------------- 1 | 0-4=0 2 | 5-9=1 -------------------------------------------------------------------------------- /docs/docker/mycat/conf/order-detail-id-table-partition.txt: -------------------------------------------------------------------------------- 1 | 0-1999=1 2 | 2000-999999999=0 -------------------------------------------------------------------------------- /docs/docker/mycat/conf/order-id-node-partition.txt: -------------------------------------------------------------------------------- 1 | 0-4=0 2 | 5-9=1 -------------------------------------------------------------------------------- /docs/docker/mycat/conf/order-id-table-partition.txt: -------------------------------------------------------------------------------- 1 | 0-999=1 2 | 1000-999999999=0 -------------------------------------------------------------------------------- /docs/docker/mycat/conf/order-number-node-partition.txt: -------------------------------------------------------------------------------- 1 | 0-4=0 2 | 5-9=1 -------------------------------------------------------------------------------- /docs/docker/mycat/conf/order-number-table-partition.txt: -------------------------------------------------------------------------------- 1 | 0-2016=1 2 | 2017-9999=0 -------------------------------------------------------------------------------- /docs/docker/mycat/conf/partition-hash-int.txt: -------------------------------------------------------------------------------- 1 | 10000=0 2 | 10010=1 -------------------------------------------------------------------------------- /docs/docker/mycat/conf/partition-range-mod.txt: -------------------------------------------------------------------------------- 1 | # range start-end ,data node group size 2 | 0-200M=5 3 | 200M1-400M=1 4 | 400M1-600M=4 5 | 600M1-800M=4 6 | 800M1-1000M=6 7 | -------------------------------------------------------------------------------- /docs/docker/mycat/conf/schema.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 13 | select 1 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /docs/docker/mycat/conf/sequence_conf.properties: -------------------------------------------------------------------------------- 1 | #default global sequence 2 | GLOBAL.HISIDS= 3 | GLOBAL.MINID=10001 4 | GLOBAL.MAXID=20000 5 | GLOBAL.CURID=10000 6 | 7 | # self define sequence 8 | COMPANY.HISIDS= 9 | COMPANY.MINID=1001 10 | COMPANY.MAXID=2000 11 | COMPANY.CURID=1000 12 | 13 | CUSTOMER.HISIDS= 14 | CUSTOMER.MINID=1001 15 | CUSTOMER.MAXID=2000 16 | CUSTOMER.CURID=1000 17 | 18 | ORDER.HISIDS= 19 | ORDER.MINID=1001 20 | ORDER.MAXID=2000 21 | ORDER.CURID=1000 22 | 23 | HOTNEWS.HISIDS= 24 | HOTNEWS.MINID=1001 25 | HOTNEWS.MAXID=2000 26 | HOTNEWS.CURID=1000 27 | 28 | -------------------------------------------------------------------------------- /docs/docker/mycat/conf/sequence_db_conf.properties: -------------------------------------------------------------------------------- 1 | #sequence stored in datanode 2 | GLOBAL=dn1 3 | COMPANY=dn1 4 | CUSTOMER=dn1 5 | ORDERS=dn1 -------------------------------------------------------------------------------- /docs/docker/mycat/conf/sequence_distributed_conf.properties: -------------------------------------------------------------------------------- 1 | INSTANCEID=01 2 | CLUSTERID=01 3 | -------------------------------------------------------------------------------- /docs/docker/mycat/conf/sequence_time_conf.properties: -------------------------------------------------------------------------------- 1 | #sequence depend on TIME 2 | WORKID=01 3 | DATAACENTERID=01 -------------------------------------------------------------------------------- /docs/docker/mycat/conf/server.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | druidparser 14 | 1 15 | 16 | 17 | 123456 18 | TESTDB 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/docker/mycat/conf/sharding-by-enum.txt: -------------------------------------------------------------------------------- 1 | 10000=0 2 | 10010=1 3 | -------------------------------------------------------------------------------- /docs/docker/mycat/conf/task-partition.txt: -------------------------------------------------------------------------------- 1 | 0-0=0 2 | 1-1=1 -------------------------------------------------------------------------------- /docs/docker/mycat/conf/user-partition.txt: -------------------------------------------------------------------------------- 1 | 0-4=0 2 | 5-9=1 -------------------------------------------------------------------------------- /docs/docker/mycat/conf/zkconf/auto-sharding-long.txt: -------------------------------------------------------------------------------- 1 | 2000001-4000000=1 2 | 0-2000000=0 3 | 4000001-8000000=2 4 | -------------------------------------------------------------------------------- /docs/docker/mycat/conf/zkconf/auto-sharding-rang-mod.txt: -------------------------------------------------------------------------------- 1 | 800M1-1000M=6 2 | 600M1-800M=4 3 | 200M1-400M=1 4 | 0-200M=5 5 | 400M1-600M=4 6 | -------------------------------------------------------------------------------- /docs/docker/mycat/conf/zkconf/autopartition-long.txt: -------------------------------------------------------------------------------- 1 | # range start-end ,data node index 2 | # K=1000,M=10000. 3 | 0-500M=0 4 | 500M-1000M=1 5 | 1000M-1500M=2 -------------------------------------------------------------------------------- /docs/docker/mycat/conf/zkconf/cacheservice.properties: -------------------------------------------------------------------------------- 1 | #used for mycat cache service conf 2 | factory.encache=io.mycat.cache.impl.EnchachePooFactory 3 | #key is pool name ,value is type,max size, expire seconds 4 | pool.SQLRouteCache=encache,10000,1800 5 | pool.ER_SQL2PARENTID=encache,1000,1800 6 | layedpool.TableID2DataNodeCache=encache,10000,18000 7 | layedpool.TableID2DataNodeCache.TESTDB_ORDERS=50000,18000 -------------------------------------------------------------------------------- /docs/docker/mycat/conf/zkconf/ehcache.xml: -------------------------------------------------------------------------------- 1 | 4 | 8 | -------------------------------------------------------------------------------- /docs/docker/mycat/conf/zkconf/partition-hash-int.txt: -------------------------------------------------------------------------------- 1 | 10000=0 2 | 10010=1 -------------------------------------------------------------------------------- /docs/docker/mycat/conf/zkconf/partition-range-mod.txt: -------------------------------------------------------------------------------- 1 | # range start-end ,data node group size 2 | 0-200M=5 3 | 200M1-400M=1 4 | 400M1-600M=4 5 | 600M1-800M=4 6 | 800M1-1000M=6 7 | -------------------------------------------------------------------------------- /docs/docker/mycat/conf/zkconf/sequence_conf.properties: -------------------------------------------------------------------------------- 1 | #default global sequence 2 | GLOBAL.HISIDS= 3 | GLOBAL.MINID=10001 4 | GLOBAL.MAXID=20000 5 | GLOBAL.CURID=10000 6 | 7 | # self define sequence 8 | COMPANY.HISIDS= 9 | COMPANY.MINID=1001 10 | COMPANY.MAXID=2000 11 | COMPANY.CURID=1000 12 | 13 | CUSTOMER.HISIDS= 14 | CUSTOMER.MINID=1001 15 | CUSTOMER.MAXID=2000 16 | CUSTOMER.CURID=1000 17 | 18 | ORDER.HISIDS= 19 | ORDER.MINID=1001 20 | ORDER.MAXID=2000 21 | ORDER.CURID=1000 22 | 23 | HOTNEWS.HISIDS= 24 | HOTNEWS.MINID=1001 25 | HOTNEWS.MAXID=2000 26 | HOTNEWS.CURID=1000 27 | 28 | -------------------------------------------------------------------------------- /docs/docker/mycat/conf/zkconf/sequence_db_conf.properties: -------------------------------------------------------------------------------- 1 | #sequence stored in datanode 2 | GLOBAL=dn1 3 | COMPANY=dn1 4 | CUSTOMER=dn1 5 | ORDERS=dn1 -------------------------------------------------------------------------------- /docs/docker/mycat/conf/zkconf/sequence_distributed_conf-mycat_fz_01.properties: -------------------------------------------------------------------------------- 1 | INSTANCEID=02 2 | CLUSTERID=02 3 | -------------------------------------------------------------------------------- /docs/docker/mycat/conf/zkconf/sequence_distributed_conf.properties: -------------------------------------------------------------------------------- 1 | INSTANCEID=01 2 | CLUSTERID=01 3 | -------------------------------------------------------------------------------- /docs/docker/mycat/conf/zkconf/sequence_time_conf-mycat_fz_01.properties: -------------------------------------------------------------------------------- 1 | #sequence depend on TIME 2 | WORKID=03 3 | DATAACENTERID=03 -------------------------------------------------------------------------------- /docs/docker/mycat/conf/zkconf/sequence_time_conf.properties: -------------------------------------------------------------------------------- 1 | #sequence depend on TIME 2 | WORKID=01 3 | DATAACENTERID=01 -------------------------------------------------------------------------------- /docs/docker/mycat/conf/zkconf/sharding-by-enum.txt: -------------------------------------------------------------------------------- 1 | 10000=0 2 | 10010=1 3 | -------------------------------------------------------------------------------- /docs/docker/mycat/conf/zkdownload/auto-sharding-long.txt: -------------------------------------------------------------------------------- 1 | 2000001-4000000=1 2 | 0-2000000=0 3 | 4000001-8000000=2 4 | -------------------------------------------------------------------------------- /docs/docker/mycat/read.md: -------------------------------------------------------------------------------- 1 | 2 | docker pull registry.cn-hangzhou.aliyuncs.com/ongo360/mycat:1.6.1 3 | ### 个人觉得名称太长 给它打个tag xxx为该镜像的id 可以通过docker images 查看 4 | docker tag xxx mycat 5 | docker rmi registry.cn-hangzhou.aliyuncs.com/ongo360/mycat:1.6.1 6 | ### 创建 以下目录,为docker数据卷做准备 我这里目录为/root/mycat 7 | mkdir conf 8 | mkdir logs 9 | ### docker持久化mycat中的配置文件到conf/logs两个目录下,在我们修改宿主机下的文件时 docker容器中的文件也会同步更新 会减少很多麻烦 10 | docker run -d --name mycat -p 8066:8066 -v `pwd`/conf:/usr/local/mycat/conf -v `pwd`/logs:/usr/local/mycat/logs mycat 11 | ### 至此 我们mycat容器已经安装并成功运行 我们可以通过docker ps -a 查看所有容器 12 | ### 如果我们看见容器状态为 down 或者 exited 13 | ### 我们可以进入 以上创建的logs 目录查看 日志 14 | mycat.log 存储运行日志 15 | wrapper.log 存储启动日志 -------------------------------------------------------------------------------- /docs/docker/mycat/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | docker stop mycat 4 | docker rm mycat 5 | 6 | docker run -d --name mycat \ 7 | -p 8066:8066 \ 8 | -v `pwd`/conf:/opt/mycat/conf \ 9 | -v `pwd`/logs:/opt/mycat/logs \ 10 | mycat -------------------------------------------------------------------------------- /docs/docker/mysql/conf/my.cnf: -------------------------------------------------------------------------------- 1 | [mysql] 2 | default-character-set=utf8mb4 3 | 4 | [mysqld] 5 | federated 6 | default-storage-engine=INNODB 7 | character_set_server=utf8mb4 8 | 9 | datadir = /var/lib/mysql 10 | port = 3306 11 | socket = /var/run/mysqld/mysqld.sock 12 | lower_case_table_names=1 13 | ft_min_word_len=1 14 | max_allowed_packet=100M 15 | default_password_lifetime = 0 16 | 17 | sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 18 | max_connections = 32000 19 | 20 | ###sql调优开启以下注释 生产注意不要开启 消耗性能 21 | ## 开始 22 | 23 | #开启慢查询分析 24 | #log_bin_trust_function_creators=1 25 | # 开启通用日志 26 | #general_log=1 27 | # 通用日志地址 28 | #general_log_file=/var/log/mysql/general.log 29 | # 开启慢查询日志 30 | #slow_query_log=1 31 | # 慢查询日志地址 32 | #slow_query_log_file=/var/log/mysql/sql-slow.log 33 | # 慢查询阀值 34 | #long_query_time=3 35 | # 输出方式,FILE表示文件,TABLE表示数据库(可以在mysql库中看到日志),可以同时使用,方法如上,也可单独使用比如log_output='FILE',输出到文件比输出到数据库效率高 36 | #log_output=FILE 37 | 38 | ## 结束 39 | 40 | 41 | ### 主从复制配置 42 | ##开始 43 | 44 | ##主机配置 45 | ##主服务器唯一 ID 46 | server-id=1 47 | ##启用二进制日志 48 | #log-bin=mysql-bin 49 | # 设置不要复制的数据库(可设置多个) 50 | #binlog-ignore-db=mysql 51 | #binlog-ignore-db=information_schema 52 | #设置需要复制的数据库 53 | #binlog-do-db=需要复制的主数据库名字 54 | #设置logbin格式 55 | #binlog_format=STATEMENT 56 | 57 | 58 | 59 | ##从机服务 id 60 | ##注意 my.cnf 中有 server-id = 1 61 | #server-id = 2 62 | ##启用二进制日志 63 | #log-bin=mysql-slave-bin 64 | #启用中继日志 65 | #relay-log=mysql-relay 66 | 67 | ##结束 68 | 69 | -------------------------------------------------------------------------------- /docs/docker/mysql/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | cur_dir=`pwd` 3 | 4 | docker stop mysql 5 | docker rm mysql 6 | docker run --name mysql --restart=always \ 7 | -v `pwd`/conf:/etc/mysql/conf.d \ 8 | -v `pwd`/data/:/var/lib/mysql \ 9 | -v `pwd`/log/:/var/log/mysql \ 10 | -p 3306:3306 \ 11 | -e MYSQL_ROOT_PASSWORD="root" \ 12 | -e TZ=Asia/Shanghai \ 13 | -d mysql:5.7.9 14 | -------------------------------------------------------------------------------- /docs/docker/nacos/init.d/custom.properties: -------------------------------------------------------------------------------- 1 | #spring.security.enabled=false 2 | #management.security=false 3 | #security.basic.enabled=false 4 | #nacos.security.ignore.urls=/** 5 | #management.metrics.export.elastic.host=http://localhost:9200 6 | # metrics for prometheus 7 | #management.endpoints.web.exposure.include=* 8 | # metrics for elastic search 9 | #management.metrics.export.elastic.enabled=false 10 | #management.metrics.export.elastic.host=http://localhost:9200 11 | # metrics for influx 12 | #management.metrics.export.influx.enabled=false 13 | #management.metrics.export.influx.db=springboot 14 | #management.metrics.export.influx.uri=http://localhost:8086 15 | #management.metrics.export.influx.auto-create-db=true 16 | #management.metrics.export.influx.consistency=one 17 | #management.metrics.export.influx.compressed=true 18 | -------------------------------------------------------------------------------- /docs/docker/nacos/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | docker stop nacos 4 | docker rm nacos 5 | docker run -idt --name nacos --restart=always \ 6 | -e JVM_XMS=512m -e JVM_XMX=512m -e JVM_XMN=384m \ 7 | -e PREFER_HOST_MODE=hostname -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql \ 8 | -e MYSQL_DATABASE_NUM=1 \ 9 | -e MYSQL_SERVICE_HOST=192.168.1.177 -e MYSQL_SERVICE_DB_NAME=nacos -e MYSQL_SERVICE_PORT=3306 \ 10 | -e MYSQL_SERVICE_USER=root \ 11 | -e MYSQL_SERVICE_PASSWORD=root \ 12 | -p 8848:8848 \ 13 | -v `pwd`/logs/:/home/nacos/logs \ 14 | -v `pwd`/init.d/custom.properties:/home/nacos/init.d/custom.properties \ 15 | nacos/nacos-server:1.4.0 16 | -------------------------------------------------------------------------------- /docs/docker/netdata/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | docker stop netdata 4 | docker rm netdata 5 | 6 | docker run -d --name=netdata \ 7 | -p 19999:19999 \ 8 | -v netdatalib:/var/lib/netdata \ 9 | -v netdatacache:/var/cache/netdata \ 10 | -v /etc/passwd:/host/etc/passwd:ro \ 11 | -v /etc/group:/host/etc/group:ro \ 12 | -v /proc:/host/proc:ro \ 13 | -v /sys:/host/sys:ro \ 14 | -v /etc/os-release:/host/etc/os-release:ro \ 15 | --restart unless-stopped \ 16 | --cap-add SYS_PTRACE \ 17 | --security-opt apparmor=unconfined \ 18 | netdata/netdata -------------------------------------------------------------------------------- /docs/docker/network.md: -------------------------------------------------------------------------------- 1 | 创建network: 2 | docker network create --subnet=172.18.0.0/16 mynetwork 3 | 4 | 查看网络: 5 | docker network ls 6 | 7 | 使用网络: 8 | docker run -itd --name networkTest1 --net mynetwork --ip 172.18.0.2 centos:latest /bin/bash -------------------------------------------------------------------------------- /docs/docker/nginx/conf/conf.d/emq.conf: -------------------------------------------------------------------------------- 1 | upstream emqx_servers { 2 | server 192.168.1.16:1883 max_fails=3 fail_timeout=60s; 3 | server 192.168.1.17:1883 max_fails=3 fail_timeout=60s; 4 | } 5 | 6 | server { 7 | listen 8883; 8 | proxy_pass emqx_servers; 9 | } -------------------------------------------------------------------------------- /docs/docker/nginx/conf/conf.d/read.md: -------------------------------------------------------------------------------- 1 | ``` 2 | upstream emqx_servers { 3 | server 192.168.1.16:1883 max_fails=3 fail_timeout=60s; 4 | server 192.168.1.17:1883 max_fails=3 fail_timeout=60s; 5 | keepalive 20000; 6 | } 7 | 8 | server { 9 | 10 | \#防止502以及Timeout的发生 11 | proxy_connect_timeout 75; 12 | proxy_read_timeout 300; 13 | proxy_send_timeout 300; 14 | proxy_buffer_size 64k; 15 | proxy_buffers 4 64k; 16 | proxy_busy_buffers_size 128k; 17 | proxy_temp_file_write_size 128k; 18 | listen 8883; 19 | proxy_pass emqx_servers; 20 | } 21 | ``` 22 | ``` 23 | weight=number 设定服务器的权重,默认是1。 24 | max_fails=number 设定Nginx与服务器通信的尝试失败的次数 25 | fail_timeout=time 设定统计失败尝试次数的时间段 26 | 27 | 28 | proxy_connect_timeout 默认是60s,设置与后端服务器建立连接的超时时间。应该注意这个超时一般不可能大于75秒。 29 | proxy_send_timeout 默认60s, 定义向后端服务器传输请求的超时 30 | proxy_buffer_size 设置缓冲区的大小为size 31 | proxy_buffers 为每个连接设置缓冲区的数量为number 32 | proxy_busy_buffers_size 当开启缓冲响应的功能以后,在没有读到全部响应的情况下,写缓冲到达一定大小时,nginx一定会向客户端发送响应,直到缓冲小于此值 33 | proxy_temp_file_write_size 在开启缓冲后端服务器响应到临时文件的功能后,设置nginx每次写数据到临时文件的size(大小)限制 34 | 35 | ``` 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /docs/docker/nginx/conf/conf.d/ssl.conf: -------------------------------------------------------------------------------- 1 | upstream emqx_servers { 2 | zone tcp_servers 64k; 3 | hash $remote_addr; 4 | server 192.168.1.16:1883 max_fails=2 fail_timeout=30s; 5 | server 192.168.1.17:1883 max_fails=2 fail_timeout=30s; 6 | server 192.168.1.177:1883 max_fails=2 fail_timeout=30s; 7 | } 8 | 9 | server { 10 | listen 8883 ssl; 11 | # status_zone tcp_server; 12 | proxy_pass emqx_servers; 13 | proxy_buffer_size 4k; 14 | ssl_handshake_timeout 15s; 15 | ssl_certificate /ssl/ca.pem; 16 | ssl_certificate_key /ssl/ca-key.pem; 17 | } 18 | -------------------------------------------------------------------------------- /docs/docker/nginx/conf/conf.h/dashboard.conf: -------------------------------------------------------------------------------- 1 | upstream dashboard_server{ 2 | server 192.168.1.16:18083 max_fails=2 fail_timeout=60s; 3 | server 192.168.1.17:18083 max_fails=2 fail_timeout=60s; 4 | server 192.168.1.177:18083 max_fails=2 fail_timeout=60s; 5 | } 6 | 7 | server { 8 | listen 28083; 9 | server_name localhost; 10 | 11 | location / { 12 | proxy_pass http://dashboard_server; 13 | } 14 | 15 | error_page 500 502 503 504 /50x.html; 16 | location = /50x.html { 17 | root html; 18 | } 19 | 20 | proxy_buffer_size 512k; 21 | proxy_buffers 4 512k; 22 | proxy_busy_buffers_size 512k; 23 | proxy_temp_file_write_size 512k; 24 | } -------------------------------------------------------------------------------- /docs/docker/nginx/conf/fastcgi_params: -------------------------------------------------------------------------------- 1 | 2 | fastcgi_param QUERY_STRING $query_string; 3 | fastcgi_param REQUEST_METHOD $request_method; 4 | fastcgi_param CONTENT_TYPE $content_type; 5 | fastcgi_param CONTENT_LENGTH $content_length; 6 | 7 | fastcgi_param SCRIPT_NAME $fastcgi_script_name; 8 | fastcgi_param REQUEST_URI $request_uri; 9 | fastcgi_param DOCUMENT_URI $document_uri; 10 | fastcgi_param DOCUMENT_ROOT $document_root; 11 | fastcgi_param SERVER_PROTOCOL $server_protocol; 12 | fastcgi_param REQUEST_SCHEME $scheme; 13 | fastcgi_param HTTPS $https if_not_empty; 14 | 15 | fastcgi_param GATEWAY_INTERFACE CGI/1.1; 16 | fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; 17 | 18 | fastcgi_param REMOTE_ADDR $remote_addr; 19 | fastcgi_param REMOTE_PORT $remote_port; 20 | fastcgi_param SERVER_ADDR $server_addr; 21 | fastcgi_param SERVER_PORT $server_port; 22 | fastcgi_param SERVER_NAME $server_name; 23 | 24 | # PHP only, required if PHP was built with --enable-force-cgi-redirect 25 | fastcgi_param REDIRECT_STATUS 200; 26 | -------------------------------------------------------------------------------- /docs/docker/nginx/conf/modules/ngx_http_geoip_module-debug.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/nginx/conf/modules/ngx_http_geoip_module-debug.so -------------------------------------------------------------------------------- /docs/docker/nginx/conf/modules/ngx_http_geoip_module.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/nginx/conf/modules/ngx_http_geoip_module.so -------------------------------------------------------------------------------- /docs/docker/nginx/conf/modules/ngx_http_image_filter_module-debug.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/nginx/conf/modules/ngx_http_image_filter_module-debug.so -------------------------------------------------------------------------------- /docs/docker/nginx/conf/modules/ngx_http_image_filter_module.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/nginx/conf/modules/ngx_http_image_filter_module.so -------------------------------------------------------------------------------- /docs/docker/nginx/conf/modules/ngx_http_js_module-debug.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/nginx/conf/modules/ngx_http_js_module-debug.so -------------------------------------------------------------------------------- /docs/docker/nginx/conf/modules/ngx_http_js_module.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/nginx/conf/modules/ngx_http_js_module.so -------------------------------------------------------------------------------- /docs/docker/nginx/conf/modules/ngx_http_xslt_filter_module-debug.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/nginx/conf/modules/ngx_http_xslt_filter_module-debug.so -------------------------------------------------------------------------------- /docs/docker/nginx/conf/modules/ngx_http_xslt_filter_module.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/nginx/conf/modules/ngx_http_xslt_filter_module.so -------------------------------------------------------------------------------- /docs/docker/nginx/conf/modules/ngx_stream_geoip_module-debug.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/nginx/conf/modules/ngx_stream_geoip_module-debug.so -------------------------------------------------------------------------------- /docs/docker/nginx/conf/modules/ngx_stream_geoip_module.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/nginx/conf/modules/ngx_stream_geoip_module.so -------------------------------------------------------------------------------- /docs/docker/nginx/conf/modules/ngx_stream_js_module-debug.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/nginx/conf/modules/ngx_stream_js_module-debug.so -------------------------------------------------------------------------------- /docs/docker/nginx/conf/modules/ngx_stream_js_module.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/nginx/conf/modules/ngx_stream_js_module.so -------------------------------------------------------------------------------- /docs/docker/nginx/conf/nginx.conf: -------------------------------------------------------------------------------- 1 | 2 | user root; 3 | worker_processes 2; 4 | 5 | error_log /var/log/nginx/error.log warn; 6 | pid /var/run/nginx.pid; 7 | worker_rlimit_nofile 655350; 8 | 9 | events { 10 | worker_connections 65535; 11 | } 12 | 13 | 14 | http { 15 | include /etc/nginx/mime.types; 16 | default_type application/octet-stream; 17 | 18 | log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 19 | '$status $body_bytes_sent "$http_referer" ' 20 | '"$http_user_agent" "$http_x_forwarded_for"'; 21 | 22 | access_log /var/log/nginx/access.log main; 23 | 24 | sendfile on; 25 | #tcp_nopush on; 26 | 27 | keepalive_timeout 65; 28 | # 文件上传大小限制 29 | client_max_body_size 512M; 30 | client_body_buffer_size 256k; 31 | 32 | # 压缩设置 33 | gzip on; 34 | gzip_min_length 5k; 35 | gzip_buffers 4 16k; 36 | gzip_comp_level 3; 37 | gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; 38 | gzip_vary on; 39 | 40 | include /etc/nginx/conf.h/*.conf; 41 | } 42 | stream { 43 | #include /etc/nginx/conf.d/ssl.conf; 44 | include /etc/nginx/conf.d/emq.conf; 45 | } -------------------------------------------------------------------------------- /docs/docker/nginx/conf/scgi_params: -------------------------------------------------------------------------------- 1 | 2 | scgi_param REQUEST_METHOD $request_method; 3 | scgi_param REQUEST_URI $request_uri; 4 | scgi_param QUERY_STRING $query_string; 5 | scgi_param CONTENT_TYPE $content_type; 6 | 7 | scgi_param DOCUMENT_URI $document_uri; 8 | scgi_param DOCUMENT_ROOT $document_root; 9 | scgi_param SCGI 1; 10 | scgi_param SERVER_PROTOCOL $server_protocol; 11 | scgi_param REQUEST_SCHEME $scheme; 12 | scgi_param HTTPS $https if_not_empty; 13 | 14 | scgi_param REMOTE_ADDR $remote_addr; 15 | scgi_param REMOTE_PORT $remote_port; 16 | scgi_param SERVER_PORT $server_port; 17 | scgi_param SERVER_NAME $server_name; 18 | -------------------------------------------------------------------------------- /docs/docker/nginx/conf/uwsgi_params: -------------------------------------------------------------------------------- 1 | 2 | uwsgi_param QUERY_STRING $query_string; 3 | uwsgi_param REQUEST_METHOD $request_method; 4 | uwsgi_param CONTENT_TYPE $content_type; 5 | uwsgi_param CONTENT_LENGTH $content_length; 6 | 7 | uwsgi_param REQUEST_URI $request_uri; 8 | uwsgi_param PATH_INFO $document_uri; 9 | uwsgi_param DOCUMENT_ROOT $document_root; 10 | uwsgi_param SERVER_PROTOCOL $server_protocol; 11 | uwsgi_param REQUEST_SCHEME $scheme; 12 | uwsgi_param HTTPS $https if_not_empty; 13 | 14 | uwsgi_param REMOTE_ADDR $remote_addr; 15 | uwsgi_param REMOTE_PORT $remote_port; 16 | uwsgi_param SERVER_PORT $server_port; 17 | uwsgi_param SERVER_NAME $server_name; 18 | -------------------------------------------------------------------------------- /docs/docker/nginx/html/crossdomain.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /docs/docker/nginx/ssl/ca-key.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEowIBAAKCAQEAxOqFdW+2UPq5naWKjOClieWOL5l+FEksO25rKx0wASQSV/yJ 3 | TJX0Uv3i2H8HFu12QUDv7JIFd2Iy+G3uuoIaY7YdrseXW0yq+VFPV0Ply6Rl5Ckb 4 | K1TqZr7KxNNCEvf+YHI3i3DKe16FiCcONlJYYRhqtQVAUMdUBbVkpcPKDMjedkBB 5 | xaR4wGtEq4ZitYda98jHnyZj9qNmyUuJhBl8BdJj5STsNu6RJFDg2YMRNj8OOkL5 6 | dk+lFPJNyKflKEpU6xv1lxLE1D0RgRg6EeAfTeAK01O/WtZAoquG4JA5VA5l6slk 7 | 4ID/0WMeGvX1Gr5wAopMI4SVAjSJMpCHQMALZwIDAQABAoIBAEas7c2ilMsn0isU 8 | 2U+K6Z8+tvO6oZfiU2/ZR7mnti0Sp0rRJu5H+/M1kI+nuAGwpPrytaoxFqkso6Kq 9 | wj5Kp/IV0T2EAX0RXWQynMlzYyzeCnwDjO7WgXLzE4/lSxfHzpMLK4huqR3yZPbj 10 | HaS9lV70BoiGI/laMXwDCOa+COzhIQzfKwSibzoPvLf46EY4g356rmVji9TxXnF4 11 | oDX+RpDejaZ4u7VqQsyRAGfKe4U9e7sc1rH4lFmn9biEe79IcckJSN56R5q3F3J+ 12 | bcoHe2OuC/mBvi7xm2nbJ78MB15gKNw/dyXrQGD5tb3Q15S2RlimuaWzOAkplXmw 13 | c7/p/OECgYEA/wHbuN0s/2SPXzZ+79i7EDu0gPF5bZEq5HGlD2FovjiwOLAHkl5j 14 | 9ISGHwwEvmbKrJWTSnxQDYJDnsChGGmvIWFM6zZxWZKQO7cKldloRRMdSS9sD106 15 | H2Zwd/AFTPIfMc1Ikzb5gx8PB2MBHh9Oz0lMTlnPtB/YqL1IbggvJO8CgYEAxa7E 16 | 4EhKVMNqSV7EAySIcp9d52HiUk/+3GH6WSboajnTMWZebpD47IV0z5giGtQ7fnpX 17 | 8YJPc4CzFmAMrIg7BhKwWa08xKRm6w9cPQ/9YG5rbnlVBpfwbdEhrrpYfCuFus3a 18 | z0vcs3s2vT19Xjl5IOB0UXSAbFce1ei73FtaMQkCgYAGt0fQIJMUztMv0MGbE3wp 19 | u0jPtIxcJFya05tjQk994wRRGeG5Kx86y1q06p4dXZus2+ubJJb/JBUf0zbq662f 20 | FW7vKunlUATYbcOrmqQyXYSB7uvLo8rqFMqVfg7FrgLATwXASsxbda/xo9vdrTlo 21 | ICgQUDE2LziHiSSlMTX8pQKBgQCkMrrNIL69EWQjdVeS1LGRo9Y37xIyFMg4/hkY 22 | HD1InqdRjRo69KgOrfuMw2zwpACW2cBalkawReJ7X2SnmrCMJtHcawziuTvTW3re 23 | LX3kr1ME/DsnsuS+EsvLenUtDmmR9JMfRIAZhOq+3WhY75wxNr7nOcHCO8sdGqeQ 24 | LUEJIQKBgBmjunOSyxB4E/kcdqLyl8PhGiLMhsBxeBrkElgDi6jE/cvMir2I57rY 25 | D9vlGNwOw29fxhi4htVEKjFyit3vYYNLYvxPB25BHnaZofSr4zbjcmou4K8vrkJu 26 | FHBF7zC7/c2gY111G5JiT9iHTSYN+05YWS1k/qGubfdRAjeYLKVD 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /docs/docker/nginx/ssl/ca.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDBTCCAe2gAwIBAgIUTDixBopw+YDp6QODs1cbxYOHIN8wDQYJKoZIhvcNAQEL 3 | BQAwEjEQMA4GA1UEAwwHa3ViZS1jYTAeFw0yMDA5MjcwMTAzMjNaFw00ODAyMTMw 4 | MTAzMjNaMBIxEDAOBgNVBAMMB2t1YmUtY2EwggEiMA0GCSqGSIb3DQEBAQUAA4IB 5 | DwAwggEKAoIBAQDE6oV1b7ZQ+rmdpYqM4KWJ5Y4vmX4USSw7bmsrHTABJBJX/IlM 6 | lfRS/eLYfwcW7XZBQO/skgV3YjL4be66ghpjth2ux5dbTKr5UU9XQ+XLpGXkKRsr 7 | VOpmvsrE00IS9/5gcjeLcMp7XoWIJw42UlhhGGq1BUBQx1QFtWSlw8oMyN52QEHF 8 | pHjAa0SrhmK1h1r3yMefJmP2o2bJS4mEGXwF0mPlJOw27pEkUODZgxE2Pw46Qvl2 9 | T6UU8k3Ip+UoSlTrG/WXEsTUPRGBGDoR4B9N4ArTU79a1kCiq4bgkDlUDmXqyWTg 10 | gP/RYx4a9fUavnACikwjhJUCNIkykIdAwAtnAgMBAAGjUzBRMB0GA1UdDgQWBBQd 11 | LSPvO8EseiGCpWfH+pwwWs/4cDAfBgNVHSMEGDAWgBQdLSPvO8EseiGCpWfH+pww 12 | Ws/4cDAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDAnMevdlQt 13 | eMWGq5mY3qpl8aGoBkffS3foZhjfc3IQYqnPGw8Yp/XTg8U2OpT6ybfTi1FlIytv 14 | 1g6jxoyK6+GDEXdasIl1AM7aEFSS5U9SrGDp+vU6aNqtSOm5sJcviftHxa4ao3hC 15 | Bt+TYEdKmiTFJ4jnQN+ndryKV7FK2jOAN6WldhgWAzq+76Dbd7HmJZ2y3CnL9ixW 16 | bV06PkoLznDI79Tc/cOoM7n3d68d9Pp4ljtNRYU+ntixr+gzfOYdbCDHPrURK8wc 17 | FD4YFytrd/zi0Y/8h+P4BSHaR5QgFPEMQW61av8SEVr0++sqpZPfhWoclzejhl1n 18 | s2sMd9UjRJrw 19 | -----END CERTIFICATE----- 20 | -------------------------------------------------------------------------------- /docs/docker/nginx/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | docker stop nginx 4 | docker rm nginx 5 | docker run -idt -p 18883:8883 -p 28083:28083 --name nginx --restart=always \ 6 | -v /data/projects/:/data/projects \ 7 | -v `pwd`/conf/:/etc/nginx \ 8 | -v `pwd`/logs/:/var/log/nginx \ 9 | -v `pwd`/html/crossdomain.xml:/usr/share/nginx/html/crossdomain.xml \ 10 | -e TZ="Asia/Shanghai" \ 11 | nginx:1.17.0 -------------------------------------------------------------------------------- /docs/docker/nginx/执行前先阅读我.md: -------------------------------------------------------------------------------- 1 | 在将start.sh复制到linux系统后赋予权限: 2 | chmod u+x *.sh 3 | 修改在windows和linux换行符不一致问题: 4 | sed -i "s/\r//" start.sh 5 | 6 | -------------------------------------------------------------------------------- /docs/docker/rabbitmq/conf/rabbitmq.conf: -------------------------------------------------------------------------------- 1 | # RabbitMQ Setting 2 | loopback_users.guest = false 3 | listeners.tcp.default = 5672 4 | management.tcp.port = 15672 5 | 6 | default_pass = root 7 | default_user = root 8 | default_vhost = iot 9 | 10 | # Mqtt Setting 11 | mqtt.vhost = iot -------------------------------------------------------------------------------- /docs/docker/rabbitmq/read.md: -------------------------------------------------------------------------------- 1 | 2 | ``` 3 | //进入docker中的rabbitmq中 4 | docker exec -it rabbitmq /bin/bash 5 | //查看用户列表 6 | rabbitmqctl list_users 7 | 8 | # 新建用户:rabbitmqctl add_user username password 9 | # 删除用户:rabbitmqctl delete_user username 10 | # 查看用户列表:rabbitmqctl list_users 11 | 12 | 我的:add_user root root (用户名和密码) 13 | 14 | 授权角色:rabbitmqctl set_user_tags User Tag 15 | # 查看用户角色: 可通过rabbitmqctl list_users查看 16 | # 重新授权,直接重新执行授权命令即可 17 | 18 | 我的: rabbitmqctl set_user_tags guest administrator 19 | 20 | # 授权单角色 21 | rabbitmqctl set_user_tags zhaok monitoring 22 | # 授权多角色 23 | rabbitmqctl set_user_tags zhaok monitoring policymaker 24 | 25 | rabbitmq的权限控制通过两层来实现,一是vhost的权限,二是确认有权限访问vhost后,对vhost内资源的权限控制(配置,读,写) 26 | 27 | (1) 设置用户权限 28 | rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP 29 | (2) 查看(指定hostpath)所有用户的权限信息 30 | rabbitmqctl list_permissions [-p VHostPath] 31 | (3) 查看指定用户的权限信息 32 | rabbitmqctl list_user_permissions User 33 | (4) 清除用户的权限信息 34 | rabbitmqctl clear_permissions [-p VHostPath] User 35 | 36 | 37 | # 单用户授权 38 | 示例:rabbitmqctl set_permissions -p iot root ".*" ".*" ".*" 39 | # 说明:给用户root授权 vhost名称为iot的 配置 写入 读取的权限 40 | 示例:rabbitmqctl set_permissions -p broker_one producer_one " " ".*" " " 41 | # 说明:给用户producer_one授权 vhost名称为broker_one的 配置 写入 读取的权限 42 | 43 | 44 | 我的: rabbitmqctl set_permissions -p / guest ".*" ".*" ".*" (这根杠杠就是我的vhost啦) 45 | 46 | 47 | 新建virtual_host: rabbitmqctl add_vhost xxx 48 | 撤销virtual_host: rabbitmqctl delete_vhost xxx 49 | 查看列表:rabbitmqctl list_vhosts 50 | 51 | 我的:rabbitmqctl add_vhost / 52 | ``` -------------------------------------------------------------------------------- /docs/docker/rabbitmq/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | docker stop rabbitmq 4 | docker rm rabbitmq 5 | 6 | docker run -d --hostname rabbitmq --name rabbitmq --restart=always \ 7 | -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=root \ 8 | -v `pwd`/data/:/var/rabbitmq/lib \ 9 | -v `pwd`/conf/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \ 10 | -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 10883:1883 \ 11 | -e TZ="Asia/Shanghai" \ 12 | rabbitmq:management 13 | -------------------------------------------------------------------------------- /docs/docker/redis/read.md: -------------------------------------------------------------------------------- 1 | 开启redis慢日志统计: 2 | ```` 3 | # 命令执行耗时超过 5 毫秒,记录慢日志 4 | CONFIG SET slowlog-log-slower-than 5000 5 | # 只保留最近 500 条慢日志 6 | CONFIG SET slowlog-max-len 500 7 | ```` 8 | 9 | ```` 10 | 127.0.0.1:6379> SLOWLOG get 5 11 | 1) 1) (integer) 32693 # 慢日志ID 12 | 2) (integer) 1593763337 # 执行时间戳 13 | 3) (integer) 5299 # 执行耗时(微秒) 14 | 4) 1) "LRANGE" # 具体执行的命令和参数 15 | 2) "user_list:2000" 16 | 3) "0" 17 | 4) "-1" 18 | 2) 1) (integer) 32692 19 | 2) (integer) 1593763337 20 | 3) (integer) 5044 21 | 4) 1) "GET" 22 | 2) "user_info:1000" 23 | ... 24 | ```` -------------------------------------------------------------------------------- /docs/docker/redis/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | docker stop redis 4 | docker rm redis 5 | docker run -idt -p 6379:6379 --name redis --restart=always \ 6 | -v `pwd`/redis.conf:/etc/redis/redis_default.conf \ 7 | -v `pwd`/data/:/data \ 8 | -e TZ="Asia/Shanghai" \ 9 | redis:4.0.12 redis-server /etc/redis/redis_default.conf --appendonly yes 10 | 11 | -------------------------------------------------------------------------------- /docs/docker/tdengine/data/dnode/.running: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/tdengine/data/dnode/.running -------------------------------------------------------------------------------- /docs/docker/tdengine/data/dnode/dnodeCfg.json: -------------------------------------------------------------------------------- 1 | { 2 | "dnodeId": 1, 3 | "clusterId": "26b0dba2-755e-4a1a-a4a6-65c408cfa718" 4 | } 5 | -------------------------------------------------------------------------------- /docs/docker/tdengine/data/dnode/dnodeEps.json: -------------------------------------------------------------------------------- 1 | { 2 | "dnodeNum": 1, 3 | "dnodeInfos": [{ 4 | "dnodeId": 1, 5 | "dnodeFqdn": "219922ba82af", 6 | "dnodePort": 6030 7 | }] 8 | } 9 | -------------------------------------------------------------------------------- /docs/docker/tdengine/data/dnode/mnodeEpSet.json: -------------------------------------------------------------------------------- 1 | { 2 | "inUse": 0, 3 | "nodeNum": 1, 4 | "nodeInfos": [{ 5 | "nodeId": 1, 6 | "nodeEp": "219922ba82af:6030" 7 | }] 8 | } 9 | -------------------------------------------------------------------------------- /docs/docker/tdengine/data/mnode/wal/wal0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/tdengine/data/mnode/wal/wal0 -------------------------------------------------------------------------------- /docs/docker/tdengine/data/vnode/vnode2/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "db": "0.log", 3 | "cfgVersion": 0, 4 | "cacheBlockSize": 1, 5 | "totalBlocks": 3, 6 | "daysPerFile": 10, 7 | "daysToKeep": 30, 8 | "daysToKeep1": 30, 9 | "daysToKeep2": 30, 10 | "minRowsPerFileBlock": 100, 11 | "maxRowsPerFileBlock": 4096, 12 | "precision": 1, 13 | "compression": 2, 14 | "walLevel": 1, 15 | "fsync": 3000, 16 | "replica": 1, 17 | "wals": 3, 18 | "quorum": 1, 19 | "nodeInfos": [{ 20 | "nodeId": 1, 21 | "nodeEp": "219922ba82af:6030" 22 | }] 23 | } 24 | -------------------------------------------------------------------------------- /docs/docker/tdengine/data/vnode/vnode2/tsdb/config: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/tdengine/data/vnode/vnode2/tsdb/config -------------------------------------------------------------------------------- /docs/docker/tdengine/data/vnode/vnode2/tsdb/meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/tdengine/data/vnode/vnode2/tsdb/meta -------------------------------------------------------------------------------- /docs/docker/tdengine/data/vnode/vnode2/wal/wal1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/tdengine/data/vnode/vnode2/wal/wal1 -------------------------------------------------------------------------------- /docs/docker/tdengine/read.md: -------------------------------------------------------------------------------- 1 | 2 | 在将start.sh复制到linux系统后赋予权限: 3 | chmod u+x *.sh 4 | 修改在windows和linux换行符不一致问题: 5 | sed -i "s/\r//" start.sh -------------------------------------------------------------------------------- /docs/docker/tdengine/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | docker stop tdengine 4 | docker rm tdengine 5 | docker run --restart=always --name tdengine -d \ 6 | -v `pwd`/conf/:/etc/taos \ 7 | -v `pwd`/logs/:/var/log/taos \ 8 | -v `pwd`/data/:/var/lib/taos \ 9 | -v /etc/localtime:/etc/localtime \ 10 | -p 6030:6030 -p 6035:6035 -p 6041:6041 -p 6030-6040:6030-6040/udp --privileged=true tdengine/tdengine:2.0.8.0 11 | -------------------------------------------------------------------------------- /docs/docker/zk/conf/configuration.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
namevaluedescription
21 | 22 | 23 |
24 |
25 | -------------------------------------------------------------------------------- /docs/docker/zk/conf/zoo.cfg: -------------------------------------------------------------------------------- 1 | dataDir=/data 2 | dataLogDir=/datalog 3 | tickTime=2000 4 | initLimit=5 5 | syncLimit=2 6 | autopurge.snapRetainCount=3 7 | autopurge.purgeInterval=0 8 | maxClientCnxns=60 9 | standaloneEnabled=true 10 | admin.enableServer=true 11 | server.1=localhost:2888:3888;2181 12 | -------------------------------------------------------------------------------- /docs/docker/zk/conf/zoo_sample.cfg: -------------------------------------------------------------------------------- 1 | # The number of milliseconds of each tick 2 | tickTime=2000 3 | # The number of ticks that the initial 4 | # synchronization phase can take 5 | initLimit=10 6 | # The number of ticks that can pass between 7 | # sending a request and getting an acknowledgement 8 | syncLimit=5 9 | # the directory where the snapshot is stored. 10 | # do not use /tmp for storage, /tmp here is just 11 | # example sakes. 12 | dataDir=/tmp/zookeeper 13 | # the port at which the clients will connect 14 | clientPort=2181 15 | # the maximum number of client connections. 16 | # increase this if you need to handle more clients 17 | #maxClientCnxns=60 18 | # 19 | # Be sure to read the maintenance section of the 20 | # administrator guide before turning on autopurge. 21 | # 22 | # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance 23 | # 24 | # The number of snapshots to retain in dataDir 25 | #autopurge.snapRetainCount=3 26 | # Purge task interval in hours 27 | # Set to "0" to disable auto purge feature 28 | #autopurge.purgeInterval=1 29 | 30 | ## Metrics Providers 31 | # 32 | # https://prometheus.io Metrics Exporter 33 | #metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider 34 | #metricsProvider.httpPort=7000 35 | #metricsProvider.exportJvmInfo=true 36 | 37 | -------------------------------------------------------------------------------- /docs/docker/zk/data/myid: -------------------------------------------------------------------------------- 1 | 1 2 | -------------------------------------------------------------------------------- /docs/docker/zk/data/version-2/snapshot.0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/zk/data/version-2/snapshot.0 -------------------------------------------------------------------------------- /docs/docker/zk/log/zookeeper_audit.log: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/docs/docker/zk/log/zookeeper_audit.log -------------------------------------------------------------------------------- /docs/docker/zk/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | docker stop zk 4 | docker rm zk 5 | 6 | docker run --name zk --restart always \ 7 | -p 2181:2181 -p 2888:2888 -p 3888:3888 \ 8 | --network mynetwork \ 9 | --ip 172.18.0.5 \ 10 | -v `pwd`/conf:/conf \ 11 | -v `pwd`/data:/data \ 12 | -v `pwd`/log:/logs \ 13 | -d zookeeper -------------------------------------------------------------------------------- /emqx-java-sdk/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | iot-project 7 | com.github.iot 8 | 1.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | emqx-java-sdk 13 | 14 | 15 | io.emqx 16 | emqx-exproto-java-sdk 17 | 0.0.2 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /emqx-java-sdk/src/main/java/com/github/emqx/JavaSdk.java: -------------------------------------------------------------------------------- 1 | package com.github.emqx; 2 | 3 | import io.emqx.exproto.AbstractExProtoHandler; 4 | import io.emqx.exproto.Connection; 5 | import io.emqx.exproto.ConnectionInfo; 6 | import io.emqx.exproto.Message; 7 | 8 | /** 9 | * @author jie 10 | */ 11 | public class JavaSdk extends AbstractExProtoHandler { 12 | /** 13 | * 终端建立连接 14 | * @param connection 15 | * @param connectionInfo 16 | */ 17 | @Override 18 | public void onConnectionEstablished(Connection connection, ConnectionInfo connectionInfo) { 19 | 20 | } 21 | 22 | /** 23 | * 终端发送消息至EMQ X Borker 24 | * @param connection 25 | * @param bytes 26 | */ 27 | @Override 28 | public void onConnectionReceived(Connection connection, byte[] bytes) { 29 | 30 | } 31 | 32 | /** 33 | * 终端断开连接 34 | * @param connection 35 | * @param s 36 | */ 37 | @Override 38 | public void onConnectionTerminated(Connection connection, String s) { 39 | 40 | } 41 | 42 | /** 43 | * EMQ X Broker订阅消息 44 | * @param connection 45 | * @param messages 46 | */ 47 | @Override 48 | public void onConnectionDeliver(Connection connection, Message[] messages) { 49 | 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/IotApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.iot; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | /** 7 | * 启动类 8 | * 9 | * @author jie 10 | */ 11 | @SpringBootApplication 12 | public class IotApplication { 13 | public static void main(String[] args) { 14 | SpringApplication.run(IotApplication.class, args); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/annotation/Topic.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.annotation; 2 | 3 | import com.github.iot.entity.Pattern; 4 | import org.springframework.stereotype.Component; 5 | 6 | import java.lang.annotation.*; 7 | 8 | /** 9 | * 自定义标记注解 10 | * @author jie 11 | */ 12 | @Component 13 | @Documented 14 | @Target({ElementType.TYPE}) 15 | @Retention(RetentionPolicy.RUNTIME) 16 | public @interface Topic { 17 | 18 | /** 19 | * topic 20 | * @return 21 | */ 22 | String topic() default ""; 23 | 24 | /** 25 | * qos 26 | * @return 27 | */ 28 | int qos() default 0; 29 | 30 | /** 31 | * 订阅模式 32 | * @return 33 | */ 34 | Pattern patten() default Pattern.NONE; 35 | 36 | /** 37 | * 共享订阅组 38 | * @return 39 | */ 40 | String group() default "group1"; 41 | } -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/BannedApi.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api; 2 | 3 | import cn.hutool.core.util.StrUtil; 4 | import cn.hutool.http.HttpRequest; 5 | import com.alibaba.fastjson.JSON; 6 | import com.github.iot.api.restentity.banned.Sbanned; 7 | import com.github.iot.api.restentity.banned.Gbanned; 8 | import com.github.iot.api.restentity.banned.R; 9 | import com.github.iot.api.restentity.banned.Result; 10 | import org.springframework.beans.factory.annotation.Value; 11 | import org.springframework.stereotype.Component; 12 | 13 | 14 | /** 15 | * 黑名单api 16 | * @author jie 17 | */ 18 | @Component 19 | public class BannedApi extends BaseApi { 20 | 21 | private static final String SUFFIX = "/banned"; 22 | 23 | /** 24 | * 获取黑名单列表 25 | * 26 | * @param page 27 | * @param size 28 | * @return 29 | */ 30 | public Gbanned select(int page, int size) { 31 | HttpRequest httpRequest = HttpRequest.get(joint(url , SUFFIX , param(page, size))); 32 | String body = getBody(httpRequest); 33 | return JSON.parseObject(body, Gbanned.class); 34 | } 35 | 36 | /** 37 | * 添加黑名单 38 | * 39 | * @param sbanned 40 | * @return 41 | */ 42 | public R instert(Sbanned sbanned) { 43 | HttpRequest httpRequest = HttpRequest.post(joint(url , SUFFIX)) 44 | .body(JSON.toJSONString(sbanned)); 45 | String body = getBody(httpRequest); 46 | return JSON.parseObject(body, R.class); 47 | } 48 | 49 | /** 50 | * 删除黑名单 51 | * 52 | * @param who 53 | * @param as 54 | * @return 55 | */ 56 | public Result del(String as, String who) { 57 | HttpRequest httpRequest = HttpRequest.delete(joint(url , SUFFIX , StrUtil.SLASH , as , StrUtil.SLASH , who)); 58 | String body = getBody(httpRequest); 59 | return JSON.parseObject(body, Result.class); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/BaseApi.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api; 2 | 3 | import cn.hutool.http.Header; 4 | import cn.hutool.http.HttpRequest; 5 | import org.springframework.beans.factory.annotation.Value; 6 | import org.springframework.http.MediaType; 7 | 8 | /** 9 | * @author jie 10 | */ 11 | public abstract class BaseApi { 12 | @Value("${iot.api.url}") 13 | protected String url; 14 | @Value("${iot.api.username}") 15 | protected String username; 16 | @Value("${iot.api.password}") 17 | protected String password; 18 | 19 | /** 20 | * 分页参数封装到url 21 | * 22 | * @param page 23 | * @param size 24 | * @return 25 | */ 26 | protected String param(int page, int size) { 27 | if (page < 1) { 28 | page = 1; 29 | } 30 | if (size < 1 || size > 10000) { 31 | size = 10; 32 | } 33 | return "?_page=" + page + "&_limit=" + size; 34 | } 35 | 36 | /** 37 | * 发送http请求获取body 38 | * 39 | * @param httpRequest 40 | * @return 41 | */ 42 | protected String getBody(HttpRequest httpRequest) { 43 | return httpRequest.header(Header.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) 44 | .basicAuth(username, password).execute().body(); 45 | } 46 | 47 | /** 48 | * url拼接 49 | * 50 | * @param args 51 | * @return 52 | */ 53 | protected String joint(String... args) { 54 | StringBuilder builder = new StringBuilder(); 55 | for (String arg : args) { 56 | builder.append(arg); 57 | } 58 | return builder.toString(); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/BrokerApi.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api; 2 | 3 | import cn.hutool.core.util.StrUtil; 4 | import cn.hutool.http.HttpRequest; 5 | import com.alibaba.fastjson.JSON; 6 | import com.github.iot.api.restentity.broker.BrokersResponse; 7 | import com.github.iot.api.restentity.broker.BrokersResponseList; 8 | import org.springframework.stereotype.Component; 9 | 10 | /** 11 | * @author jie 12 | */ 13 | @Component 14 | public class BrokerApi extends BaseApi { 15 | 16 | private static final String SUFFIX = "/brokers"; 17 | 18 | /** 19 | * 查询集群下所有节点信息 20 | * 21 | * @return 22 | */ 23 | public BrokersResponseList findBrokers() { 24 | HttpRequest httpRequest = HttpRequest.get(joint(url, SUFFIX)); 25 | String body = getBody(httpRequest); 26 | return JSON.parseObject(body, BrokersResponseList.class); 27 | } 28 | 29 | /** 30 | * 查询指定节点信息 31 | * 32 | * @return 33 | */ 34 | public BrokersResponse findBroker(String node) { 35 | HttpRequest httpRequest = HttpRequest.get(joint(url, SUFFIX, StrUtil.SLASH, node)); 36 | String body = getBody(httpRequest); 37 | return JSON.parseObject(body, BrokersResponse.class); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/ClientApi.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api; 2 | 3 | import cn.hutool.core.util.StrUtil; 4 | import cn.hutool.http.HttpRequest; 5 | import com.alibaba.fastjson.JSON; 6 | import com.github.iot.api.restentity.client.ClientOne; 7 | import com.github.iot.api.restentity.client.ClientPage; 8 | import org.springframework.beans.factory.annotation.Value; 9 | import org.springframework.stereotype.Component; 10 | import com.github.iot.api.restentity.BaseResoult; 11 | /** 12 | * client操作api 13 | * @author jie 14 | */ 15 | @Component 16 | public class ClientApi extends BaseApi { 17 | 18 | 19 | private static final String SUFFIX = "/clients"; 20 | 21 | /** 22 | * 分页查询全部设备 23 | * @param page 24 | * @param size 25 | * @return 26 | */ 27 | public ClientPage findPage(int page, int size) { 28 | HttpRequest httpRequest = HttpRequest.get(joint(url, SUFFIX, param(page, size))); 29 | String body = getBody(httpRequest); 30 | return JSON.parseObject(body, ClientPage.class); 31 | } 32 | 33 | /** 34 | * 根据id查询设备 35 | * @param clientId 36 | * @return 37 | */ 38 | public ClientOne findById(String clientId) { 39 | HttpRequest httpRequest = HttpRequest.get(joint(url, SUFFIX, StrUtil.SLASH, clientId)); 40 | String body = getBody(httpRequest); 41 | return JSON.parseObject(body, ClientOne.class); 42 | } 43 | 44 | /** 45 | * 根据clientId剔除设备 46 | * @param clientId 47 | * @return 48 | */ 49 | public BaseResoult disClientByClientid(String clientId){ 50 | HttpRequest httpRequest = HttpRequest.delete(joint(url, SUFFIX, StrUtil.SLASH, clientId)); 51 | String body = getBody(httpRequest); 52 | return JSON.parseObject(body, BaseResoult.class); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/NodesApi.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api; 2 | 3 | import cn.hutool.core.util.StrUtil; 4 | import cn.hutool.http.HttpRequest; 5 | import com.alibaba.fastjson.JSON; 6 | import com.github.iot.api.restentity.node.NodeResponse; 7 | import com.github.iot.api.restentity.node.NodeResponseList; 8 | import org.springframework.stereotype.Component; 9 | 10 | /** 11 | * @author jie 12 | */ 13 | @Component 14 | public class NodesApi extends BaseApi { 15 | 16 | private static final String SUFFIX = "/nodes"; 17 | 18 | /** 19 | * 查询集群下所有节点信息 20 | * 21 | * @return 22 | */ 23 | public NodeResponseList findNodes() { 24 | HttpRequest httpRequest = HttpRequest.get(joint(url, SUFFIX)); 25 | String body = getBody(httpRequest); 26 | return JSON.parseObject(body, NodeResponseList.class); 27 | } 28 | 29 | /** 30 | * 查询指定集群节点信息 31 | * 32 | * @return 33 | */ 34 | public NodeResponse findNode(String node) { 35 | HttpRequest httpRequest = HttpRequest.get(joint(url, SUFFIX, StrUtil.SLASH, node)); 36 | String body = getBody(httpRequest); 37 | return JSON.parseObject(body, NodeResponse.class); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/PublishApi.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api; 2 | 3 | import cn.hutool.http.HttpRequest; 4 | import com.alibaba.fastjson.JSON; 5 | import com.github.iot.api.restentity.pub.Publish; 6 | import org.springframework.beans.factory.annotation.Value; 7 | import org.springframework.stereotype.Component; 8 | import com.github.iot.api.restentity.BaseResoult; 9 | /** 10 | * @author jie 11 | */ 12 | @Component 13 | public class PublishApi extends BaseApi { 14 | 15 | private static final String SUFFIX = "/mqtt/publish"; 16 | 17 | /** 18 | * 发布消息 19 | * @param publish 20 | * @return 21 | */ 22 | public BaseResoult pub(Publish publish) { 23 | HttpRequest httpRequest = HttpRequest.post(joint(url, SUFFIX)).body(JSON.toJSONString(publish)); 24 | String body = getBody(httpRequest); 25 | return JSON.parseObject(body, BaseResoult.class); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/ResourcesApi.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api; 2 | 3 | import cn.hutool.core.util.StrUtil; 4 | import cn.hutool.http.HttpRequest; 5 | import com.alibaba.fastjson.JSON; 6 | import com.github.iot.api.restentity.BaseResoult; 7 | import com.github.iot.api.restentity.resources.ResourceParameters; 8 | import com.github.iot.api.restentity.resources.ResourceResponse; 9 | import org.springframework.beans.factory.annotation.Value; 10 | import org.springframework.stereotype.Component; 11 | 12 | /** 13 | * @author jie 14 | */ 15 | @Component 16 | public class ResourcesApi extends BaseApi { 17 | 18 | private static final String SUFFIX = "/resources"; 19 | 20 | /** 21 | * 根据id查找资源 22 | * @param id 23 | * @return 24 | */ 25 | public ResourceResponse findById(String id) { 26 | HttpRequest httpRequest = HttpRequest.get(joint(url, SUFFIX, StrUtil.SLASH, id)); 27 | String body = getBody(httpRequest); 28 | return JSON.parseObject(body, ResourceResponse.class); 29 | } 30 | 31 | /** 32 | * 插入资源 33 | * @param resources 34 | * @return 35 | */ 36 | public ResourceResponse instert(ResourceParameters resources) { 37 | HttpRequest httpRequest = HttpRequest.post(joint(url, SUFFIX)).body(JSON.toJSONString(resources)); 38 | String body = getBody(httpRequest); 39 | return JSON.parseObject(body, ResourceResponse.class); 40 | } 41 | 42 | /** 43 | * 删除资源 44 | * @param id 45 | * @return 46 | */ 47 | public BaseResoult del(String id) { 48 | HttpRequest httpRequest = HttpRequest.delete(joint(url, SUFFIX, StrUtil.SLASH, id)); 49 | String body = getBody(httpRequest); 50 | return JSON.parseObject(body, BaseResoult.class); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/restentity/BaseResoult.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api.restentity; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author jie 7 | */ 8 | @Data 9 | public class BaseResoult { 10 | private Integer code; 11 | } 12 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/restentity/banned/Gbanned.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api.restentity.banned; 2 | 3 | import com.github.iot.api.restentity.BaseResoult; 4 | import lombok.Data; 5 | 6 | /** 7 | * @author jie 8 | */ 9 | @Data 10 | public class Gbanned extends BaseResoult { 11 | 12 | /** 13 | * 由对象构成的数组,对象中的字段与 POST 方法中的 Request Body 相同 14 | */ 15 | private String[] data; 16 | /** 17 | * 分页信息 18 | */ 19 | private Object meta; 20 | } 21 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/restentity/banned/R.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api.restentity.banned; 2 | 3 | import com.github.iot.api.restentity.BaseResoult; 4 | import lombok.Data; 5 | 6 | /** 7 | * @author jie 8 | */ 9 | @Data 10 | public class R extends BaseResoult { 11 | private Object data; 12 | } 13 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/restentity/banned/Result.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api.restentity.banned; 2 | 3 | import com.github.iot.api.restentity.BaseResoult; 4 | import lombok.Data; 5 | 6 | /** 7 | * @author jie 8 | */ 9 | @Data 10 | public class Result extends BaseResoult { 11 | private String message; 12 | } 13 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/restentity/banned/Sbanned.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api.restentity.banned; 2 | 3 | import lombok.Builder; 4 | import lombok.Data; 5 | 6 | /** 7 | * @author jie 8 | */ 9 | @Data 10 | @Builder 11 | public class Sbanned { 12 | /** 13 | * 添加至黑名单的对象,可以是客户端标识符、用户名和 IP 地址 14 | */ 15 | private String who; 16 | /** 17 | * 用于区分黑名单对象类型,可以是 clientid,username,peerhost 18 | */ 19 | private String as; 20 | /** 21 | * 指示该对象被谁添加至黑名单 22 | */ 23 | private String by; 24 | /** 25 | * 添加至黑名单的时间,单位:秒 26 | */ 27 | private Integer at; 28 | /** 29 | * 何时从黑名单中解除,单位:秒 30 | */ 31 | private Integer until; 32 | } 33 | 34 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/restentity/broker/Brokers.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api.restentity.broker; 2 | 3 | import lombok.Data; 4 | import lombok.NoArgsConstructor; 5 | 6 | /** 7 | * @author jie 8 | */ 9 | @Data 10 | @NoArgsConstructor 11 | public class Brokers { 12 | /** 13 | * EMQ X 版本 14 | */ 15 | private String version; 16 | /** 17 | * EMQ X 运行时间,格式为 "H hours, m minutes, s seconds" 18 | */ 19 | private String uptime; 20 | /** 21 | * 软件描述 22 | */ 23 | private String sysdescr; 24 | /** 25 | * EMQ X 使用的 Erlang/OTP 版本 26 | */ 27 | private String otp_release; 28 | /** 29 | * 节点状态 30 | */ 31 | private String node_status; 32 | /** 33 | * 节点名称 34 | */ 35 | private String node; 36 | /** 37 | * 当前时间,格式为 "YYYY-MM-DD HH:mm:ss" 38 | */ 39 | private String datetime; 40 | } 41 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/restentity/broker/BrokersResponse.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api.restentity.broker; 2 | 3 | import com.github.iot.api.restentity.BaseResoult; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * @author jie 12 | */ 13 | @Data 14 | @NoArgsConstructor 15 | @AllArgsConstructor 16 | public class BrokersResponse extends BaseResoult { 17 | private Brokers data; 18 | } 19 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/restentity/broker/BrokersResponseList.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api.restentity.broker; 2 | 3 | import com.github.iot.api.restentity.BaseResoult; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * @author jie 12 | */ 13 | @Data 14 | @NoArgsConstructor 15 | @AllArgsConstructor 16 | public class BrokersResponseList extends BaseResoult { 17 | private List data; 18 | } 19 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/restentity/client/ClientOne.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api.restentity.client; 2 | 3 | import com.github.iot.api.restentity.BaseResoult; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | /** 9 | * @author jie 10 | */ 11 | @Data 12 | @NoArgsConstructor 13 | @AllArgsConstructor 14 | public class ClientOne extends BaseResoult { 15 | private Client[] data; 16 | } 17 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/restentity/client/ClientPage.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api.restentity.client; 2 | 3 | import com.github.iot.api.restentity.BaseResoult; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | /** 9 | * @author jie 10 | */ 11 | @Data 12 | @NoArgsConstructor 13 | @AllArgsConstructor 14 | public class ClientPage extends BaseResoult { 15 | private Client[] data; 16 | private Meta meta; 17 | } 18 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/restentity/client/Meta.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api.restentity.client; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | /** 8 | * @author jie 9 | */ 10 | @Data 11 | @NoArgsConstructor 12 | @AllArgsConstructor 13 | public class Meta { 14 | private int page; 15 | private int limit; 16 | private int count; 17 | private int hasnext; 18 | } 19 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/restentity/node/Node.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api.restentity.node; 2 | 3 | import lombok.Data; 4 | import lombok.NoArgsConstructor; 5 | 6 | /** 7 | * @author jie 8 | */ 9 | @Data 10 | @NoArgsConstructor 11 | public class Node { 12 | /** 13 | * EMQ X 版本 14 | */ 15 | private String version; 16 | /** 17 | * EMQ X 运行时间 18 | */ 19 | private String uptime; 20 | /** 21 | * 已占用的进程数量 22 | */ 23 | private int process_used; 24 | /** 25 | * 可用的进程数量 26 | */ 27 | private int process_available; 28 | /** 29 | * EMQ X 使用的 Erlang/OTP 版本 30 | */ 31 | private String otp_release; 32 | /** 33 | * 节点状态 34 | */ 35 | private String node_status; 36 | /** 37 | * 节点名称 38 | */ 39 | private String node; 40 | /** 41 | * VM 已占用的内存大小 42 | */ 43 | private String memory_used; 44 | /** 45 | * VM 已分配的系统内存 46 | */ 47 | private String memory_total; 48 | /** 49 | * 操作系统的最大文件描述符限制 50 | */ 51 | private int max_fds; 52 | /** 53 | * 15 分钟内的 CPU 平均负载 54 | */ 55 | private String load15; 56 | /** 57 | * 5 分钟内的 CPU 平均负载 58 | */ 59 | private String load5; 60 | /** 61 | * 1 分钟内的 CPU 平均负载 62 | */ 63 | private String load1; 64 | /** 65 | * 当前接入此节点的客户端数量 66 | */ 67 | private int connections; 68 | } 69 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/restentity/node/NodeResponse.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api.restentity.node; 2 | 3 | import com.github.iot.api.restentity.BaseResoult; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * @author jie 12 | */ 13 | @Data 14 | @NoArgsConstructor 15 | @AllArgsConstructor 16 | public class NodeResponse extends BaseResoult { 17 | 18 | private Node data; 19 | } 20 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/restentity/node/NodeResponseList.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api.restentity.node; 2 | 3 | import com.github.iot.api.restentity.BaseResoult; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * @author jie 12 | */ 13 | @Data 14 | @NoArgsConstructor 15 | @AllArgsConstructor 16 | public class NodeResponseList extends BaseResoult { 17 | 18 | private List data; 19 | } 20 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/restentity/pub/Publish.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api.restentity.pub; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | /** 8 | * @author jie 9 | */ 10 | @Data 11 | @NoArgsConstructor 12 | @AllArgsConstructor 13 | public class Publish { 14 | /** 15 | * 主题 16 | */ 17 | private String topic; 18 | /** 19 | * 消息正文 20 | */ 21 | private String payload; 22 | /** 23 | * QoS 等级 24 | */ 25 | private int qos; 26 | /** 27 | * 是否为保留消息 28 | */ 29 | private boolean retain; 30 | /** 31 | * 客户端标识符 32 | */ 33 | private String clientid; 34 | } 35 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/restentity/resources/Resource.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api.restentity.resources; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @author jie 11 | */ 12 | @Data 13 | @NoArgsConstructor 14 | @AllArgsConstructor 15 | public class Resource { 16 | /** 17 | * 资源 ID 18 | */ 19 | private String id; 20 | /** 21 | * 资源所从属的资源类型的名字 22 | */ 23 | private String type; 24 | /** 25 | * 资源的配置。参数以 key-value 形式表示。 26 | * 详情可参看后面的示例 27 | */ 28 | private Object config; 29 | /** 30 | * 资源的状态信息 31 | */ 32 | private List status; 33 | /** 34 | * 资源的描述信息 35 | */ 36 | private Object description; 37 | 38 | 39 | @Data 40 | @NoArgsConstructor 41 | @AllArgsConstructor 42 | public static class StatusBean { 43 | private String node; 44 | private boolean is_alive; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/restentity/resources/ResourceParameters.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api.restentity.resources; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | /** 8 | * @author jie 9 | */ 10 | 11 | @Data 12 | @NoArgsConstructor 13 | @AllArgsConstructor 14 | public class ResourceParameters { 15 | 16 | 17 | /** 18 | * 资源类型名。指定要使用哪个资源类型创建资源。 19 | */ 20 | private String type; 21 | /** 22 | * 资源参数。要跟对应的资源类型的 params 里指定的格式相一致。 23 | */ 24 | private ConfigBean config; 25 | /** 26 | * 资源描述 27 | */ 28 | private String description; 29 | 30 | 31 | @Data 32 | @NoArgsConstructor 33 | @AllArgsConstructor 34 | public static class ConfigBean { 35 | private String url; 36 | private String headers; 37 | private String method; 38 | } 39 | } 40 | 41 | 42 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/restentity/resources/ResourceResponse.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api.restentity.resources; 2 | 3 | import com.github.iot.api.restentity.BaseResoult; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | /** 9 | * @author jie 10 | */ 11 | @Data 12 | @NoArgsConstructor 13 | @AllArgsConstructor 14 | public class ResourceResponse extends BaseResoult { 15 | private Resource data; 16 | } 17 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/restentity/rules/RuleParameters.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api.restentity.rules; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @author jie 11 | */ 12 | 13 | 14 | @Data 15 | @NoArgsConstructor 16 | @AllArgsConstructor 17 | public class RuleParameters { 18 | 19 | /** 20 | * 规则的 SQL 语句 21 | */ 22 | private String rawsql; 23 | /** 24 | * 规则描述 25 | */ 26 | private String description; 27 | /** 28 | * 动作列表 29 | */ 30 | private List actions; 31 | 32 | 33 | @Data 34 | @NoArgsConstructor 35 | @AllArgsConstructor 36 | public static class ActionsBean { 37 | /** 38 | * 动作名称 39 | */ 40 | private String name; 41 | /** 42 | * 动作参数。参数以 key-value 形式表示。 43 | * 详情可参看添加规则的示例 44 | */ 45 | private Object params; 46 | 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/api/restentity/rules/RuleResponse.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.api.restentity.rules; 2 | 3 | import com.github.iot.api.restentity.BaseResoult; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | /** 9 | * @author jie 10 | */ 11 | @Data 12 | @NoArgsConstructor 13 | @AllArgsConstructor 14 | public class RuleResponse extends BaseResoult { 15 | private Rule rule; 16 | } 17 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/common/MsgDecoder.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.common; 2 | 3 | import org.eclipse.paho.client.mqttv3.MqttMessage; 4 | 5 | /** 6 | * @author jie 7 | */ 8 | public interface MsgDecoder { 9 | /** 10 | * 下位机消息解码器 11 | * @param msg 12 | * @return 13 | */ 14 | T decoder(MqttMessage msg); 15 | } 16 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/common/MsgEncoder.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.common; 2 | 3 | /** 4 | * @author jie 5 | */ 6 | public interface MsgEncoder { 7 | /** 8 | * 消息编码为字节数组 9 | * @param t 10 | * @return 11 | */ 12 | byte[] encoder(T t); 13 | } 14 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/common/SuperConsumer.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.common; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.eclipse.paho.client.mqttv3.IMqttMessageListener; 5 | import org.eclipse.paho.client.mqttv3.MqttMessage; 6 | 7 | /** 8 | * 封装的主题消费父类 9 | * 10 | * @author jie 11 | */ 12 | @Slf4j 13 | public abstract class SuperConsumer implements IMqttMessageListener, MsgDecoder { 14 | @Override 15 | public void messageArrived(String topic, MqttMessage mqttMessage) { 16 | //log.info("\r\n 收到主题 :\r\n" + topic + " qos="+mqttMessage.getQos()+" 的消息:\r\n" + new String(mqttMessage.getPayload())); 17 | ThreadUtils.executorService.submit(() -> { 18 | try { 19 | T decoder = decoder(mqttMessage); 20 | msgHandler(topic, decoder); 21 | } catch (Exception ex) { 22 | //解决业务处理错误导致断线问题 23 | log.error(ex.toString()); 24 | } 25 | }); 26 | } 27 | 28 | /** 29 | * 业务操作 30 | * 31 | * @param topic 32 | * @param entity 33 | */ 34 | protected abstract void msgHandler(String topic, T entity); 35 | } 36 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/common/SupperRpcConsumer.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.common; 2 | 3 | import com.github.iot.utils.PubMessageUtils; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.eclipse.paho.client.mqttv3.IMqttMessageListener; 6 | import org.eclipse.paho.client.mqttv3.MqttMessage; 7 | 8 | /** 9 | * 同步回调 10 | * @author jie 11 | */ 12 | @Slf4j 13 | public abstract class SupperRpcConsumer implements IMqttMessageListener, MsgEncoder, MsgDecoder { 14 | @Override 15 | public void messageArrived(String topic, MqttMessage mqttMessage) { 16 | log.info("\r\n 收到主题 :\r\n" + topic + " qos=" + mqttMessage.getQos() + " 的消息:\r\n" + new String(mqttMessage.getPayload())); 17 | ThreadUtils.executorService.submit(() -> { 18 | try { 19 | D decoder = decoder(mqttMessage); 20 | E e = msgHandler(topic, decoder); 21 | byte[] encoder = encoder(e); 22 | PubMessageUtils.pub(topic.replace("request","response"),encoder,2); 23 | } catch (Exception ex) { 24 | //解决业务处理错误导致断线问题 25 | log.error(ex.toString()); 26 | } 27 | }); 28 | } 29 | 30 | /** 31 | * 业务操作 32 | * 33 | * @param topic 34 | * @param entity 35 | */ 36 | protected abstract E msgHandler(String topic, D entity); 37 | } 38 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/common/ThreadUtils.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.common; 2 | 3 | import java.util.concurrent.ExecutorService; 4 | import java.util.concurrent.Executors; 5 | 6 | /** 7 | * @author jie 8 | */ 9 | public class ThreadUtils { 10 | /** 11 | * 线程池 12 | */ 13 | public static ExecutorService executorService = Executors.newFixedThreadPool(10); 14 | } 15 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/consumer/ClientCount.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.consumer; 2 | 3 | import com.github.iot.annotation.Topic; 4 | import com.github.iot.common.SuperConsumer; 5 | import org.eclipse.paho.client.mqttv3.MqttMessage; 6 | 7 | /** 8 | * 监听在线设备总数 9 | * @author jie 10 | */ 11 | @Topic(topic = "$SYS/brokers/+/stats/connections.count") 12 | public class ClientCount extends SuperConsumer { 13 | @Override 14 | protected void msgHandler(String topic, String entity) { 15 | 16 | } 17 | 18 | @Override 19 | public String decoder(MqttMessage msg) { 20 | return new String(msg.getPayload()); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/consumer/ConnectMsg.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.consumer; 2 | 3 | import com.alibaba.fastjson.JSON; 4 | import com.github.iot.annotation.Topic; 5 | import com.github.iot.common.SuperConsumer; 6 | import com.github.iot.entity.Connect; 7 | import com.github.iot.entity.Pattern; 8 | import org.eclipse.paho.client.mqttv3.MqttMessage; 9 | 10 | /** 11 | * @author jie 12 | */ 13 | @Topic(topic = "$SYS/brokers/+/clients/+/connected", patten = Pattern.SHARE) 14 | public class ConnectMsg extends SuperConsumer { 15 | @Override 16 | protected void msgHandler(String topic, Connect entity) { 17 | //接下来就是你自己的操作了 18 | //TODO 业务操作 19 | } 20 | 21 | @Override 22 | public Connect decoder(MqttMessage msg) { 23 | return JSON.parseObject(new String(msg.getPayload()), Connect.class); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/consumer/DeviceMsg.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.consumer; 2 | 3 | import com.github.iot.annotation.Topic; 4 | import com.github.iot.common.SuperConsumer; 5 | import org.eclipse.paho.client.mqttv3.MqttMessage; 6 | 7 | /** 8 | * @author jie 9 | */ 10 | @Topic(topic = "device/#",qos =2 ) 11 | public class DeviceMsg extends SuperConsumer { 12 | @Override 13 | protected void msgHandler(String topic, String entity) { 14 | //TODO 业务操作 15 | } 16 | 17 | @Override 18 | public String decoder(MqttMessage msg) { 19 | return new String(msg.getPayload()); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/consumer/DisConnectMsg.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.consumer; 2 | 3 | import com.alibaba.fastjson.JSON; 4 | import com.github.iot.annotation.Topic; 5 | import com.github.iot.common.SuperConsumer; 6 | import com.github.iot.entity.Disconnect; 7 | import com.github.iot.entity.Pattern; 8 | import org.eclipse.paho.client.mqttv3.MqttMessage; 9 | 10 | /** 11 | * @author jie 12 | */ 13 | @Topic(topic = "$SYS/brokers/+/clients/+/disconnected",patten = Pattern.SHARE) 14 | public class DisConnectMsg extends SuperConsumer { 15 | 16 | @Override 17 | protected void msgHandler(String topic, Disconnect entity) { 18 | //接下来就是你自己的操作了 19 | //TODO 业务操作 20 | } 21 | 22 | @Override 23 | public Disconnect decoder(MqttMessage msg) { 24 | return JSON.parseObject(new String(msg.getPayload()), Disconnect.class); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/controller/BannedController.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.controller; 2 | 3 | import com.github.iot.api.BannedApi; 4 | import com.github.iot.api.restentity.banned.Sbanned; 5 | import com.github.iot.api.restentity.banned.Gbanned; 6 | import com.github.iot.api.restentity.banned.R; 7 | import com.github.iot.api.restentity.banned.Result; 8 | import lombok.Data; 9 | import org.springframework.web.bind.annotation.*; 10 | 11 | /** 12 | * @author jie 13 | */ 14 | @Data 15 | @RestController 16 | public class BannedController { 17 | 18 | private final BannedApi api; 19 | 20 | @GetMapping("/getBanned") 21 | public Gbanned getBanned(int page,int size) { 22 | return api.select(page, size); 23 | } 24 | 25 | @PostMapping("/setBanned") 26 | public R setBanned(@RequestBody Sbanned sbanned) { 27 | return api.instert(sbanned); 28 | } 29 | 30 | @DeleteMapping("/delBanned/{as}/{who}") 31 | public Result delBanned(@PathVariable("as") String as, @PathVariable("who") String who) { 32 | return api.del(as, who); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/controller/LoadController.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.controller; 2 | 3 | import com.github.iot.api.NodesApi; 4 | import com.github.iot.api.restentity.node.Node; 5 | import com.github.iot.api.restentity.node.NodeResponseList; 6 | import com.github.iot.entity.HttpAuthCode; 7 | import lombok.AllArgsConstructor; 8 | import lombok.extern.slf4j.Slf4j; 9 | import org.springframework.http.HttpStatus; 10 | import org.springframework.http.ResponseEntity; 11 | import org.springframework.web.bind.annotation.*; 12 | 13 | import java.util.List; 14 | import java.util.Random; 15 | 16 | /** 17 | * @author jie 18 | */ 19 | @Slf4j 20 | @RestController 21 | @RequestMapping("/mqtt") 22 | @AllArgsConstructor 23 | public class LoadController { 24 | 25 | private final NodesApi nodesApi; 26 | 27 | @PostMapping("/auth") 28 | public ResponseEntity auth(String clientid, String username, String password) { 29 | log.info(clientid + " " + username + " " + password); 30 | if (password.equals("root")){ 31 | return new ResponseEntity(HttpStatus.OK); 32 | }else { 33 | return new ResponseEntity(HttpStatus.NOT_FOUND); 34 | } 35 | 36 | } 37 | 38 | @GetMapping("/broker") 39 | public String getBroker() { 40 | NodeResponseList nodes = nodesApi.findNodes(); 41 | List data = nodes.getData(); 42 | int size = data.size(); 43 | Random random = new Random(); 44 | int i = random.nextInt(size); 45 | Node node = data.get(i); 46 | return node.getNode(); 47 | } 48 | 49 | 50 | } 51 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/controller/PubController.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.controller; 2 | 3 | import com.github.iot.api.PublishApi; 4 | import com.github.iot.api.restentity.BaseResoult; 5 | import com.github.iot.api.restentity.pub.Publish; 6 | import com.github.iot.utils.PubMessageUtils; 7 | import lombok.Data; 8 | import org.eclipse.paho.client.mqttv3.MqttMessage; 9 | import org.springframework.web.bind.annotation.GetMapping; 10 | import org.springframework.web.bind.annotation.PostMapping; 11 | import org.springframework.web.bind.annotation.RequestBody; 12 | import org.springframework.web.bind.annotation.RestController; 13 | 14 | 15 | /** 16 | * @author jie 17 | */ 18 | @Data 19 | @RestController 20 | public class PubController { 21 | 22 | private final PublishApi publishApi; 23 | 24 | @GetMapping("pub") 25 | public String pub(String topic, String message) throws Exception { 26 | PubMessageUtils.pub(topic, message); 27 | return "ok"; 28 | } 29 | 30 | @GetMapping("rrpc") 31 | public String rrpc(String topic, String message) throws Exception { 32 | MqttMessage rrpcMessage = PubMessageUtils.rrpcPub(topic, message, 8); 33 | return new String(rrpcMessage.getPayload()); 34 | } 35 | 36 | @PostMapping("pub") 37 | public BaseResoult pub(@RequestBody Publish publish) throws Exception { 38 | return publishApi.pub(publish); 39 | 40 | } 41 | 42 | @GetMapping("message") 43 | public String pub(Integer qos, String topic, String message) throws Exception { 44 | boolean pub = PubMessageUtils.pub(topic, message, qos); 45 | if (pub) { 46 | return "ok"; 47 | } else { 48 | return "error"; 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/entity/Connect.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.entity; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import lombok.ToString; 7 | 8 | /** 9 | *

设备上线 10 | * 邮箱:275236367@qq.com 11 | * 创建时间: 2020/1/4 12 | * @author jie 13 | */ 14 | @Data 15 | @ToString 16 | @NoArgsConstructor 17 | @AllArgsConstructor 18 | public class Connect { 19 | /** 20 | * 客户端id 21 | */ 22 | private String clientid; 23 | /** 24 | * 用户名 25 | */ 26 | private String username; 27 | /** 28 | * ip地址 29 | */ 30 | private String ipaddress; 31 | /** 32 | *连接回执 33 | */ 34 | private int connack; 35 | /** 36 | * 事件触发时间 (ms) 37 | */ 38 | private long ts; 39 | /** 40 | * 协议版本 41 | */ 42 | private int proto_ver; 43 | /** 44 | * 协议名字 45 | */ 46 | private String proto_name; 47 | /** 48 | * MQTT clean_start 49 | */ 50 | private boolean clean_start; 51 | /** 52 | *保持连接 53 | */ 54 | private int keepalive; 55 | } 56 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/entity/Disconnect.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.entity; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import lombok.ToString; 7 | 8 | /** 9 | *

设备下线 10 | * @author jie 11 | */ 12 | @Data 13 | @ToString 14 | @NoArgsConstructor 15 | @AllArgsConstructor 16 | public class Disconnect { 17 | /** 18 | * 客户端id 19 | */ 20 | private String clientid; 21 | /** 22 | * 用户名 23 | */ 24 | private String username; 25 | /** 26 | * 终端连接断开原因 27 | */ 28 | private String reason; 29 | /** 30 | * 事件触发时间 (ms) 31 | */ 32 | private long ts; 33 | } 34 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/entity/EmqProperties.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.entity; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | import static com.github.iot.entity.EmqProperties.PREFIX; 6 | /** 7 | * 配置类 8 | * @author jie 9 | */ 10 | @Data 11 | @ConfigurationProperties(prefix = PREFIX) 12 | public class EmqProperties { 13 | public static final String PREFIX="emqx"; 14 | /** 15 | * emq服务器地址 16 | */ 17 | private String broker; 18 | /** 19 | * 用户名 20 | */ 21 | private String userName; 22 | /** 23 | * 密码 24 | */ 25 | private String password; 26 | /** 27 | * 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,这里设置为true表示每次连接到服务器都以新的身份连接 28 | */ 29 | private Boolean cleanSession; 30 | /** 31 | * 是否断线重连 32 | */ 33 | private Boolean reconnect; 34 | /** 35 | * 连接超时时间 36 | */ 37 | private Integer timeout; 38 | /** 39 | * 心跳间隔 40 | */ 41 | private Integer keepAlive; 42 | 43 | } 44 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/entity/HttpAuthCode.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.entity; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | /** 7 | * @author jie 8 | */ 9 | @Data 10 | @AllArgsConstructor 11 | public class HttpAuthCode { 12 | private Integer statusCode; 13 | 14 | public static HttpAuthCode ok() { 15 | return new HttpAuthCode(200); 16 | } 17 | 18 | public static HttpAuthCode error() { 19 | return new HttpAuthCode(404); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/entity/Pattern.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.entity; 2 | 3 | /** 4 | * 订阅模式 5 | * @author jie 6 | */ 7 | 8 | public enum Pattern { 9 | /** 10 | * 普通订阅 11 | */ 12 | NONE, 13 | /** 14 | * 不带群组的共享订阅 15 | */ 16 | QUEUE, 17 | /** 18 | * 带群组的共享订阅 19 | */ 20 | SHARE; 21 | } 22 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/entity/SubscriptTopic.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.entity; 2 | 3 | import lombok.*; 4 | import org.eclipse.paho.client.mqttv3.IMqttMessageListener; 5 | 6 | /** 7 | * @author jie 8 | */ 9 | @Data 10 | @Builder 11 | @ToString 12 | @NoArgsConstructor 13 | @AllArgsConstructor 14 | public class SubscriptTopic { 15 | /** 16 | * 原主题 17 | */ 18 | private String topic; 19 | /** 20 | * 订阅主题 21 | */ 22 | private String subTopic; 23 | /** 24 | * 订阅模式 25 | */ 26 | private Pattern pattern; 27 | /** 28 | * 消息等级 29 | */ 30 | private int qos; 31 | /** 32 | * 消费类 33 | */ 34 | private IMqttMessageListener messageListener; 35 | 36 | } 37 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/rrpc/redis/RedisConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.rrpc.redis; 2 | 3 | import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.Configuration; 6 | import org.springframework.data.redis.connection.RedisConnectionFactory; 7 | import org.springframework.data.redis.core.RedisTemplate; 8 | import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer; 9 | import org.springframework.data.redis.serializer.StringRedisSerializer; 10 | 11 | 12 | /** 13 | * @author jie 14 | */ 15 | @Configuration 16 | public class RedisConfig { 17 | 18 | @Bean("redisTemplate") 19 | public RedisTemplate redisMessageTemplate(RedisConnectionFactory connectionFactory) { 20 | RedisTemplate template = new RedisTemplate<>(); 21 | template.setKeySerializer(new StringRedisSerializer()); 22 | template.setHashKeySerializer(new StringRedisSerializer()); 23 | template.setHashValueSerializer(new JdkSerializationRedisSerializer()); 24 | template.setValueSerializer(new JdkSerializationRedisSerializer()); 25 | template.setDefaultSerializer(new FastJsonRedisSerializer<>(Object.class)); 26 | template.setConnectionFactory(connectionFactory); 27 | return template; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/shadow/BaseShadow.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.shadow; 2 | 3 | import lombok.*; 4 | 5 | import java.time.LocalDateTime; 6 | 7 | /** 8 | * 设备影子 9 | * 10 | * @author jie 11 | */ 12 | @Data 13 | @Builder 14 | @ToString 15 | @NoArgsConstructor 16 | @AllArgsConstructor 17 | public class BaseShadow { 18 | 19 | private State state; 20 | 21 | private Metadata metadata; 22 | 23 | private LocalDateTime timestamp; 24 | 25 | private long version; 26 | } 27 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/shadow/CacheShadow.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.shadow; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | /** 7 | * @author jie 8 | */ 9 | public class CacheShadow { 10 | public static Map deviceShadow = new HashMap<>(); 11 | } 12 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/shadow/Metadata.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.shadow; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import lombok.ToString; 7 | 8 | import java.time.LocalDateTime; 9 | 10 | /** 11 | * @author jie 12 | */ 13 | @Data 14 | @ToString 15 | @NoArgsConstructor 16 | @AllArgsConstructor 17 | public class Metadata { 18 | /** 19 | * 设备的预期状态更新时间 20 | */ 21 | private LocalDateTime desired; 22 | /** 23 | * 设备的报告状态更新时间 24 | */ 25 | private LocalDateTime reported; 26 | } 27 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/shadow/State.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.shadow; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import lombok.ToString; 7 | 8 | /** 9 | * @author jie 10 | */ 11 | @Data 12 | @ToString 13 | @NoArgsConstructor 14 | @AllArgsConstructor 15 | public class State { 16 | /** 17 | * 设备的预期状态 18 | */ 19 | private T desired; 20 | /** 21 | * 设备的报告状态 22 | */ 23 | private T reported; 24 | } 25 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/shadow/test/Light.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.shadow.test; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import lombok.ToString; 7 | 8 | /** 9 | * @author jie 10 | */ 11 | @Data 12 | @ToString 13 | @NoArgsConstructor 14 | @AllArgsConstructor 15 | public class Light { 16 | 17 | private String color; 18 | } 19 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/shadow/test/LightShadow.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.shadow.test; 2 | 3 | import com.alibaba.fastjson.JSON; 4 | import com.github.iot.annotation.Topic; 5 | import com.github.iot.common.SupperRpcConsumer; 6 | import com.github.iot.shadow.BaseShadow; 7 | import com.github.iot.shadow.CacheShadow; 8 | import org.eclipse.paho.client.mqttv3.MqttMessage; 9 | 10 | /** 11 | * 设备改变状态 12 | * 13 | * @author jie 14 | */ 15 | //@Topic(topic = "shadow/update/loght/+", qos = 2) 16 | public class LightShadow extends SupperRpcConsumer, BaseShadow> { 17 | 18 | @Override 19 | public BaseShadow decoder(MqttMessage msg) { 20 | return JSON.parseObject(new String(msg.getPayload()), BaseShadow.class); 21 | } 22 | 23 | 24 | @Override 25 | public byte[] encoder(BaseShadow lightBaseShadow) { 26 | return new byte[0]; 27 | } 28 | 29 | @Override 30 | protected BaseShadow msgHandler(String topic, BaseShadow entity) { 31 | String clientId = topic.substring(topic.lastIndexOf("/")).replace("/", ""); 32 | BaseShadow shadow = CacheShadow.deviceShadow.get(clientId); 33 | 34 | 35 | CacheShadow.deviceShadow.put(clientId, entity); 36 | return null; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/shadow/test/PullStatus.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.shadow.test; 2 | 3 | import cn.hutool.core.util.CharsetUtil; 4 | import com.alibaba.fastjson.JSON; 5 | import com.github.iot.annotation.Topic; 6 | import com.github.iot.common.SupperRpcConsumer; 7 | import com.github.iot.shadow.BaseShadow; 8 | import lombok.SneakyThrows; 9 | import org.eclipse.paho.client.mqttv3.MqttMessage; 10 | 11 | import static com.github.iot.shadow.CacheShadow.deviceShadow; 12 | 13 | /** 14 | * 设备拉取影子状态 15 | * @author jie 16 | */ 17 | //@Topic(topic = "shadow/request/loght/+", qos = 2) 18 | public class PullStatus extends SupperRpcConsumer> { 19 | @Override 20 | protected BaseShadow msgHandler(String topic, Light entity) { 21 | String clientId = topic.substring(topic.lastIndexOf("/")).replace("/", ""); 22 | return deviceShadow.get(clientId); 23 | } 24 | 25 | @Override 26 | public Light decoder(MqttMessage msg) { 27 | return JSON.parseObject(new String(msg.getPayload()), Light.class); 28 | } 29 | 30 | @SneakyThrows 31 | @Override 32 | public byte[] encoder(BaseShadow baseShadow) { 33 | return JSON.toJSONString(baseShadow).getBytes(CharsetUtil.UTF_8); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/utils/ApplicationContextUtil.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.utils; 2 | 3 | import org.springframework.beans.BeansException; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.context.ApplicationContext; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.annotation.PostConstruct; 9 | 10 | /** 11 | * 类名称:ApplicationContextUtil 12 | * 类描述: 13 | *

14 | *

从容器中获取bean 15 | * 创建时间: 2020/1/3 16 | * @author jie 17 | */ 18 | @Component 19 | public class ApplicationContextUtil { 20 | 21 | private static ApplicationContextUtil instance; 22 | @Autowired 23 | private ApplicationContext applicationContext; 24 | 25 | @PostConstruct 26 | public void applicationContextUtil() { 27 | instance = this; 28 | } 29 | 30 | /** 31 | * 根据字节码获取bean 32 | * @param clazz 33 | * @param 34 | * @return 35 | */ 36 | public static T getBean(Class clazz) { 37 | return instance.applicationContext.getBean(clazz); 38 | } 39 | 40 | /** 41 | * 根据名字获取bean 42 | * @param name 43 | * @param 44 | * @return 45 | * @throws BeansException 46 | */ 47 | public static T getBean(String name) throws BeansException { 48 | return (T) instance.applicationContext.getBean(name); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/webhook/WebHookController.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.webhook; 2 | 3 | 4 | import com.github.iot.webhook.model.ClientMessage; 5 | import com.github.iot.webhook.model.WhConnect; 6 | import com.github.iot.webhook.model.WhDisconnect; 7 | import lombok.extern.slf4j.Slf4j; 8 | import org.springframework.web.bind.annotation.RequestBody; 9 | import org.springframework.web.bind.annotation.RequestMapping; 10 | import org.springframework.web.bind.annotation.RestController; 11 | 12 | /** 13 | * emq规则引擎测试web接口 14 | * 15 | * @author jie 16 | */ 17 | @Slf4j 18 | @RestController 19 | @RequestMapping("/webhook") 20 | public class WebHookController { 21 | /** 22 | * 规则:SELECT * FROM "$events/client_connected" 23 | * 24 | * @param msg 25 | */ 26 | @RequestMapping("/connect") 27 | public void connect(@RequestBody WhConnect msg) { 28 | //接下来就是你自己的操作了 29 | //TODO 业务操作 30 | log.info(msg.toString()); 31 | } 32 | 33 | /** 34 | * 规则:SELECT * FROM "$events/client_disconnected" 35 | * 36 | * @param msg 37 | */ 38 | @RequestMapping("/disconnect") 39 | public void disconnect(@RequestBody WhDisconnect msg) { 40 | //接下来就是你自己的操作了 41 | //TODO 业务操作 42 | log.info(msg.toString()); 43 | } 44 | 45 | /** 46 | * 规则:SELECT * FROM "device/#" 47 | * 48 | * @param msg 49 | */ 50 | @RequestMapping("/device") 51 | public void device(@RequestBody ClientMessage msg) { 52 | //接下来就是你自己的操作了 53 | //TODO 业务操作 54 | log.info(msg.toString()); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/webhook/model/ClientMessage.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.webhook.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import lombok.ToString; 7 | 8 | /** 9 | * @author jie 10 | */ 11 | @Data 12 | @ToString 13 | @NoArgsConstructor 14 | @AllArgsConstructor 15 | public class ClientMessage { 16 | /** 17 | * 用户名 18 | */ 19 | private String username; 20 | /** 21 | * topic 22 | */ 23 | private String topic; 24 | /** 25 | * 事件触发时间 (ms) 26 | */ 27 | private Long timestamp; 28 | /** 29 | * qos 30 | */ 31 | private Integer qos; 32 | /** 33 | * PUBLISH 消息到达 Broker 的时间 (ms) 34 | */ 35 | private Long publish_received_at; 36 | /** 37 | * 客户端的 IPAddress 38 | */ 39 | private String peerhost; 40 | /** 41 | * 消息内容 42 | */ 43 | private String payload; 44 | /** 45 | * 节点 46 | */ 47 | private String node; 48 | /** 49 | * 消息id 50 | */ 51 | private String id; 52 | /** 53 | * 客户端id 54 | */ 55 | private String clientid; 56 | 57 | } 58 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/webhook/model/WhConnect.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.webhook.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import lombok.ToString; 7 | 8 | /** 9 | * @author jie 10 | */ 11 | @Data 12 | @ToString 13 | @NoArgsConstructor 14 | @AllArgsConstructor 15 | public class WhConnect { 16 | /** 17 | * 消息目的 Client ID 18 | */ 19 | private String clientid; 20 | /** 21 | * 消息目的用户名 22 | */ 23 | private String username ; 24 | /** 25 | * 主题挂载点(主题前缀) 26 | */ 27 | private String mountpoint; 28 | /** 29 | * 终端的 IPAddress 和 Port 30 | */ 31 | private String peername; 32 | /** 33 | * emqx 监听的 IPAddress 和 Port 34 | */ 35 | private String sockname; 36 | /** 37 | * 协议名字 38 | */ 39 | private String proto_name; 40 | /** 41 | * 协议版本 42 | */ 43 | private String proto_ver; 44 | /** 45 | * MQTT 保活间隔 46 | */ 47 | private Long keepalive; 48 | /** 49 | * MQTT clean_start 50 | */ 51 | private Boolean clean_start; 52 | /** 53 | * MQTT Session 过期时间 54 | */ 55 | private Long expiry_interval; 56 | /** 57 | * 是否为 MQTT bridge 连接 58 | */ 59 | private Boolean is_bridge; 60 | /** 61 | * 终端连接完成时间 (s) 62 | */ 63 | private Long connected_at; 64 | /** 65 | * 事件触发时间 (ms) 66 | */ 67 | private Long timestamp; 68 | /** 69 | * 事件触发所在节点 70 | */ 71 | private String node; 72 | } 73 | -------------------------------------------------------------------------------- /iot-Share/src/main/java/com/github/iot/webhook/model/WhDisconnect.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.webhook.model; 2 | 3 | 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | import lombok.ToString; 8 | 9 | /** 10 | * @author jie 11 | */ 12 | @Data 13 | @ToString 14 | @AllArgsConstructor 15 | @NoArgsConstructor 16 | public class WhDisconnect { 17 | /** 18 | * 终端连接断开原因 19 | */ 20 | private String reason; 21 | /** 22 | * 消息目的 Client ID 23 | */ 24 | private String clientid; 25 | /** 26 | * 消息目的用户名 27 | */ 28 | private String username; 29 | /** 30 | * 终端的 IPAddress 和 Port 31 | */ 32 | private String peername; 33 | /** 34 | * emqx 监听的 IPAddress 和 Port 35 | */ 36 | private String sockname; 37 | /** 38 | * 终端连接断开时间 (s) 39 | */ 40 | private Long disconnected_at; 41 | /** 42 | * 事件触发时间 (ms) 43 | */ 44 | private Long timestamp; 45 | /** 46 | * 事件触发所在节点 47 | */ 48 | private String node; 49 | } 50 | -------------------------------------------------------------------------------- /iot-Share/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | iot: 2 | host: iot-server 3 | api: 4 | url: http://${iot.host}:8081/api/v4 # api默认地址 这个不要动 除非修改配置文件 5 | # admin public为默认认证的账号密码 生产环境建议修改 配置文件emqx_management.conf 6 | username: admin #认证账号 可以在Dashboard-->通用-->应用 新建app AppId 7 | password: public #认证密码 可以在Dashboard-->通用-->应用 新建app App秘钥 8 | server: 9 | port: 9100 10 | spring: 11 | redis: 12 | host: ${iot.host} 13 | port: 6379 14 | password: root 15 | emqx: 16 | broker: tcp://${iot.host}:1883 #broker地址 17 | userName: root #授权账号 一定要授权的 18 | password: root #密码 19 | cleanSession: true #是否清除会话 20 | reconnect: true #是否断线重连 21 | timeout: 20 #连接超时时间 22 | keepAlive: 10 #心跳间隔 -------------------------------------------------------------------------------- /iot-Share/src/test/java/com/Jtest.java: -------------------------------------------------------------------------------- 1 | package com; 2 | 3 | 4 | import cn.hutool.core.codec.Base64; 5 | import org.junit.Test; 6 | 7 | import java.util.ArrayList; 8 | import java.util.HashMap; 9 | import java.util.List; 10 | import java.util.Map; 11 | 12 | /** 13 | * @author jie 14 | */ 15 | public class Jtest { 16 | public static void main(String[] args) { 17 | 18 | long l = System.currentTimeMillis(); 19 | for (int i = 0; i < 1000000; i++) { 20 | String a = i + ""; 21 | } 22 | long l1 = System.currentTimeMillis(); 23 | System.out.println("1耗时:" + (l1 - l)); 24 | long l2 = System.currentTimeMillis(); 25 | for (int i = 0; i < 1000000; i++) { 26 | String a = String.valueOf(i); 27 | } 28 | long l3 = System.currentTimeMillis(); 29 | System.out.println("2耗时:" + (l3 - l2)); 30 | 31 | } 32 | 33 | public static List ingotSort(Map map, int size) { 34 | List list = new ArrayList(); 35 | for (int i = 0; i < size; i++) { 36 | Number t = map.get(String.valueOf(size)); 37 | if (t == null) { 38 | t = 0; 39 | } 40 | list.add((T) t); 41 | } 42 | return list; 43 | } 44 | 45 | @Test 46 | public void test() { 47 | String encode = Base64.encode("0000", "utf8"); 48 | System.out.println(encode); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /iot-Share/src/test/java/com/gitee/test/JDKTest.java: -------------------------------------------------------------------------------- 1 | package com.gitee.test; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.ToString; 6 | 7 | /** 8 | * @author jie 9 | */ 10 | public class JDKTest { 11 | public static void main(String[] args) { 12 | User a = new User("axiba",20); 13 | updata(a); 14 | System.out.println(a); 15 | } 16 | 17 | private static void updata(User a) { 18 | a.setName("000"); 19 | a.setAge(10); 20 | } 21 | } 22 | 23 | @Data 24 | @ToString 25 | @AllArgsConstructor 26 | class User { 27 | private String name; 28 | private int age; 29 | } -------------------------------------------------------------------------------- /iot-Share/src/test/java/com/gitee/test/MqttTest.java: -------------------------------------------------------------------------------- 1 | package com.gitee.test; 2 | 3 | import cn.hutool.core.util.CharsetUtil; 4 | import org.eclipse.paho.client.mqttv3.MqttClient; 5 | import org.eclipse.paho.client.mqttv3.MqttConnectOptions; 6 | import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; 7 | 8 | /** 9 | * @author jie 10 | */ 11 | public class MqttTest { 12 | static final String broker = "tcp://192.168.1.177:1883"; 13 | 14 | public static void main(String[] args) throws InterruptedException { 15 | 16 | for (int i = 1; i < 500000; i++) { 17 | String clientId = "device" + i; 18 | 19 | try { 20 | MqttClient client = new MqttClient(broker, clientId, new MemoryPersistence()); 21 | MqttConnectOptions options = new MqttConnectOptions(); 22 | options.setUserName("root"); 23 | options.setPassword("root".toCharArray()); 24 | client.connect(options); 25 | // send(client, clientId); 26 | } catch (Exception e) { 27 | e.printStackTrace(); 28 | } finally { 29 | // System.out.println(clientId + "结束发送"); 30 | } 31 | System.out.println("连接第"+i); 32 | Thread.sleep(1); 33 | } 34 | } 35 | 36 | public static void send(MqttClient client, String msg) throws Exception { 37 | // client.subscribe("device/" + msg); 38 | for (int i = 0; i < 1000; i++) { 39 | client.publish("device/" + msg, (msg).getBytes(CharsetUtil.UTF_8), 0, false); 40 | Thread.sleep(10); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /iot-Share/共享订阅.md: -------------------------------------------------------------------------------- 1 | 本demo主要功能有:java springBoot2.x集成mqtt客户端、共享订阅、同步rrpc调用、emqx httpApi简单封装、webhook接口demo。 2 | 3 | 包介绍: 4 | - annotation 自定义的注解包 5 | - api emqx http接口封装 6 | - common 一些通用抽象和接口 7 | - config emqx的配置类 8 | - consumer 订阅主题的消费类 9 | - controller 侧试用的controller 10 | - entity 工程的基础实体类 11 | - rrpc 同步调用实现和配置包 12 | - utils 工具类 13 | - webhook webhook简单的测试接口 14 | -------------------------------------------------------------------------------- /iot-TDengine-mybatis/TDengine在java中的使用.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itwwj/iot-project/0665300a816fb4407b4abce3c478a18b16ceee8f/iot-TDengine-mybatis/TDengine在java中的使用.md -------------------------------------------------------------------------------- /iot-TDengine-mybatis/src/main/java/com/github/iot/tdengine/TDengineApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.tdengine; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | /** 7 | * @author jie 8 | */ 9 | @SpringBootApplication 10 | public class TDengineApplication { 11 | public static void main(String[] args) { 12 | SpringApplication.run(TDengineApplication.class, args); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /iot-TDengine-mybatis/src/main/java/com/github/iot/tdengine/controller/WeatherController.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.tdengine.controller; 2 | 3 | import com.github.iot.tdengine.domain.Weather; 4 | import com.github.iot.tdengine.service.WeatherService; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.web.bind.annotation.*; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * @author jie 12 | */ 13 | @RequestMapping("/weather") 14 | @RestController 15 | public class WeatherController { 16 | 17 | @Autowired 18 | private WeatherService weatherService; 19 | 20 | /** 21 | * create database and table 22 | * @return 23 | */ 24 | @GetMapping("/init") 25 | public boolean init(){ 26 | return weatherService.init(); 27 | } 28 | 29 | /** 30 | * Pagination Query 31 | * @param limit 32 | * @param offset 33 | * @return 34 | */ 35 | @GetMapping("/{limit}/{offset}") 36 | public List queryWeather(@PathVariable Long limit, @PathVariable Long offset){ 37 | return weatherService.query(limit, offset); 38 | } 39 | 40 | /** 41 | * upload single weather info 42 | * @param temperature 43 | * @param humidity 44 | * @return 45 | */ 46 | @PostMapping("/{temperature}/{humidity}") 47 | public int saveWeather(@PathVariable int temperature, @PathVariable float humidity){ 48 | 49 | return weatherService.save(temperature, humidity); 50 | } 51 | 52 | /** 53 | * upload multi weather info 54 | * @param weatherList 55 | * @return 56 | */ 57 | @PostMapping("/batch") 58 | public int batchSaveWeather(@RequestBody List weatherList){ 59 | 60 | return weatherService.save(weatherList); 61 | } 62 | 63 | } -------------------------------------------------------------------------------- /iot-TDengine-mybatis/src/main/java/com/github/iot/tdengine/dao/WeatherMapper.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.tdengine.dao; 2 | 3 | import com.github.iot.tdengine.domain.Weather; 4 | import org.apache.ibatis.annotations.Mapper; 5 | import org.apache.ibatis.annotations.Param; 6 | import org.springframework.stereotype.Component; 7 | 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * @author jie 13 | */ 14 | @Component 15 | @Mapper 16 | public interface WeatherMapper { 17 | 18 | int insert(Weather weather); 19 | 20 | int batchInsert(List weatherList); 21 | 22 | List select(@Param("limit") Long limit, @Param("offset")Long offset); 23 | 24 | void createDB(); 25 | 26 | void createTable(); 27 | } 28 | -------------------------------------------------------------------------------- /iot-TDengine-mybatis/src/main/java/com/github/iot/tdengine/domain/Weather.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.tdengine.domain; 2 | 3 | import lombok.Data; 4 | 5 | import java.sql.Timestamp; 6 | 7 | /** 8 | * @author jie 9 | */ 10 | @Data 11 | public class Weather { 12 | 13 | private Timestamp ts; 14 | 15 | private int temperature; 16 | 17 | private float humidity; 18 | } 19 | -------------------------------------------------------------------------------- /iot-TDengine-mybatis/src/main/java/com/github/iot/tdengine/service/WeatherService.java: -------------------------------------------------------------------------------- 1 | package com.github.iot.tdengine.service; 2 | 3 | import com.github.iot.tdengine.dao.WeatherMapper; 4 | import com.github.iot.tdengine.domain.Weather; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Service; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * @author jie 12 | */ 13 | @Service 14 | public class WeatherService { 15 | 16 | @Autowired 17 | private WeatherMapper weatherMapper; 18 | 19 | public boolean init() { 20 | weatherMapper.createDB(); 21 | weatherMapper.createTable(); 22 | return true; 23 | } 24 | 25 | public List query(Long limit, Long offset) { 26 | return weatherMapper.select(limit, offset); 27 | } 28 | 29 | public int save(int temperature, float humidity) { 30 | Weather weather = new Weather(); 31 | weather.setTemperature(temperature); 32 | weather.setHumidity(humidity); 33 | return weatherMapper.insert(weather); 34 | } 35 | 36 | public int save(List weatherList) { 37 | return weatherMapper.batchInsert(weatherList); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /iot-TDengine-mybatis/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | 2 | server: 3 | port: 9101 4 | 5 | spring: 6 | datasource: 7 | driver-class-name: com.taosdata.jdbc.TSDBDriver 8 | url: jdbc:TAOS://127.0.0.1:6030/test?cfgdir=C:/TDengine/cfg 9 | username: root 10 | password: taosdata 11 | druid: 12 | initial-size: 5 13 | min-idle: 5 14 | max-active: 5 15 | max-wait: 60000 16 | validation-query: select server_status(); 17 | validation-query-timeout: 5000 18 | test-on-borrow: false 19 | test-on-return: false 20 | test-while-idle: true 21 | time-between-eviction-runs-millis: 60000 22 | min-evictable-idle-time-millis: 60000 23 | max-evictable-idle-time-millis: 90000 24 | 25 | 26 | mybatis: 27 | mapper-locations: classpath:mapper/*.xml -------------------------------------------------------------------------------- /iot-modbus/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | iot-project 7 | com.github.iot 8 | 1.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | iot-modbus 13 | 14 | 15 | 16 | com.infiniteautomation 17 | modbus4j 18 | 3.0.3 19 | 20 | 21 | org.apache.commons 22 | commons-lang3 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /iot-mongodb/src/main/java/com/github/mongodb/MongoDBApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.mongodb; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | /** 7 | * @author jie 8 | */ 9 | @SpringBootApplication 10 | public class MongoDBApplication { 11 | 12 | public static void main(String[] args) { 13 | SpringApplication.run(MongoDBApplication.class,args); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /iot-mongodb/src/main/java/com/github/mongodb/base/controller/BaseController.java: -------------------------------------------------------------------------------- 1 | package com.github.mongodb.base.controller; 2 | 3 | 4 | import com.github.mongodb.base.R; 5 | import com.github.mongodb.base.service.BaseDataService; 6 | 7 | /** 8 | * @author jie 9 | */ 10 | public interface BaseController { 11 | 12 | 13 | /** 14 | * 获取实体的类型 15 | * 16 | * @return 17 | */ 18 | Class getEntityClass(); 19 | 20 | /** 21 | * 获取service 22 | * @return 23 | */ 24 | BaseDataService getservice(); 25 | /** 26 | * 成功返回 27 | * 28 | * @param data 返回内容 29 | * @param 返回类型 30 | * @return R 31 | */ 32 | default R success(T data) { 33 | return R.success(data); 34 | } 35 | 36 | /** 37 | * 成功返回 38 | * 39 | * @return R.true 40 | */ 41 | default R success() { 42 | return R.success(); 43 | } 44 | 45 | /** 46 | * 失败返回 47 | * 48 | * @param msg 失败消息 49 | * @param 返回类型 50 | * @return 51 | */ 52 | default R fail(String msg) { 53 | return R.fail(msg); 54 | } 55 | 56 | /** 57 | * 失败返回 58 | * 59 | * @param msg 失败消息 60 | * @param args 动态参数 61 | * @param 返回类型 62 | * @return 63 | */ 64 | default R fail(String msg, Object... args) { 65 | return R.fail(msg, args); 66 | } 67 | 68 | 69 | } 70 | -------------------------------------------------------------------------------- /iot-mongodb/src/main/java/com/github/mongodb/base/controller/DeleteController.java: -------------------------------------------------------------------------------- 1 | package com.github.mongodb.base.controller; 2 | 3 | import com.github.mongodb.base.R; 4 | import io.swagger.annotations.ApiImplicitParam; 5 | import io.swagger.annotations.ApiImplicitParams; 6 | import io.swagger.annotations.ApiOperation; 7 | import org.springframework.web.bind.annotation.DeleteMapping; 8 | import org.springframework.web.bind.annotation.RequestParam; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * @author jie 14 | */ 15 | public interface DeleteController extends BaseController { 16 | 17 | 18 | /** 19 | * 删除方法 20 | * 21 | * @param ids 22 | * @return 23 | */ 24 | @ApiOperation(value = "删除") 25 | @DeleteMapping 26 | @ApiImplicitParams({ 27 | @ApiImplicitParam(name = "ids[]", value = "主键id", dataType = "array", paramType = "query"), 28 | }) 29 | default R delete(@RequestParam("ids[]") List ids) { 30 | for (ID id : ids) { 31 | getservice().deleteById(id); 32 | } 33 | return R.success(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /iot-mongodb/src/main/java/com/github/mongodb/base/controller/PageController.java: -------------------------------------------------------------------------------- 1 | package com.github.mongodb.base.controller; 2 | 3 | import com.github.mongodb.base.R; 4 | import com.github.mongodb.base.service.BaseDataService; 5 | import io.swagger.annotations.ApiOperation; 6 | import org.springframework.data.domain.Page; 7 | import org.springframework.validation.annotation.Validated; 8 | import org.springframework.web.bind.annotation.GetMapping; 9 | import org.springframework.web.bind.annotation.PostMapping; 10 | import org.springframework.web.bind.annotation.RequestBody; 11 | 12 | import java.util.Map; 13 | 14 | 15 | /** 16 | * @author jie 17 | */ 18 | interface PageController extends BaseController { 19 | 20 | /** 21 | * 分页查询 22 | * 23 | * @return 24 | */ 25 | @ApiOperation(value = "分页列表查询") 26 | @GetMapping(value = "/page") 27 | default R> page(int page,int size) throws Exception { 28 | BaseDataService getservice = getservice(); 29 | 30 | Page page1 = getservice.findPage(page, size); 31 | return R.success(page1); 32 | } 33 | /** 34 | * 条件分页查询 35 | * 36 | * @return 37 | */ 38 | @ApiOperation(value = "分页列表查询") 39 | @PostMapping(value = "/page") 40 | default R> exmaplePage(@RequestBody Map map,int page,int size) throws Exception { 41 | BaseDataService getservice = getservice(); 42 | Page byExample = getservice.findByExample(map, page, size); 43 | return R.success(byExample); 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /iot-mongodb/src/main/java/com/github/mongodb/base/controller/QueryController.java: -------------------------------------------------------------------------------- 1 | package com.github.mongodb.base.controller; 2 | 3 | import com.github.mongodb.base.R; 4 | import io.swagger.annotations.ApiImplicitParam; 5 | import io.swagger.annotations.ApiImplicitParams; 6 | import io.swagger.annotations.ApiOperation; 7 | import org.springframework.web.bind.annotation.GetMapping; 8 | import org.springframework.web.bind.annotation.PathVariable; 9 | 10 | /** 11 | * @author jie 12 | */ 13 | public interface QueryController extends BaseController { 14 | /** 15 | * 查询 16 | * 17 | * @param id 主键id 18 | * @return 查询结果 19 | */ 20 | @ApiImplicitParams({ 21 | @ApiImplicitParam(name = "id", value = "主键", dataType = "long", paramType = "query"), 22 | }) 23 | @ApiOperation(value = "查询", notes = "查询") 24 | @GetMapping("/{id}") 25 | default R get(@PathVariable String id) { 26 | return R.success(getservice().findById(id)); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /iot-mongodb/src/main/java/com/github/mongodb/base/controller/SaveController.java: -------------------------------------------------------------------------------- 1 | package com.github.mongodb.base.controller; 2 | 3 | import com.github.mongodb.base.R; 4 | import io.swagger.annotations.ApiOperation; 5 | import org.springframework.validation.annotation.Validated; 6 | import org.springframework.web.bind.annotation.PostMapping; 7 | import org.springframework.web.bind.annotation.RequestBody; 8 | 9 | /** 10 | * @author jie 11 | */ 12 | public interface SaveController extends BaseController { 13 | /** 14 | * 新增 15 | * 16 | * @return 实体 17 | */ 18 | @ApiOperation(value = "新增") 19 | @PostMapping 20 | default R save(@RequestBody @Validated E saveDTO) { 21 | E save = getservice().save(saveDTO); 22 | return R.success(save); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /iot-mongodb/src/main/java/com/github/mongodb/base/controller/SuperDataController.java: -------------------------------------------------------------------------------- 1 | package com.github.mongodb.base.controller; 2 | 3 | import com.github.mongodb.base.service.BaseDataService; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | 6 | import java.lang.reflect.ParameterizedType; 7 | 8 | /** 9 | * @author jie 10 | */ 11 | public abstract class SuperDataController implements DeleteController,QueryController ,PageController,SaveController{ 12 | 13 | @Autowired 14 | private S service; 15 | 16 | @Override 17 | public Class getEntityClass() { 18 | return(Class) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]; 19 | } 20 | 21 | @Override 22 | public BaseDataService getservice() { 23 | return service; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /iot-mongodb/src/main/java/com/github/mongodb/base/service/SupperService.java: -------------------------------------------------------------------------------- 1 | package com.github.mongodb.base.service; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.data.mongodb.core.MongoTemplate; 5 | 6 | import java.lang.reflect.ParameterizedType; 7 | 8 | /** 9 | * @author jie 10 | */ 11 | public abstract class SupperService implements BaseDataService { 12 | @Autowired 13 | private MongoTemplate mongoTemplate; 14 | 15 | protected Class entityClass = null; 16 | 17 | @Override 18 | public MongoTemplate getDao() { 19 | return mongoTemplate; 20 | } 21 | 22 | @Override 23 | public Class getEntityClass() { 24 | if (entityClass == null) { 25 | this.entityClass = (Class) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]; 26 | } 27 | return this.entityClass; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /iot-mongodb/src/main/java/com/github/mongodb/config/SwaggerConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.mongodb.config; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | import springfox.documentation.builders.ApiInfoBuilder; 6 | import springfox.documentation.builders.PathSelectors; 7 | import springfox.documentation.builders.RequestHandlerSelectors; 8 | import springfox.documentation.service.ApiInfo; 9 | import springfox.documentation.service.Contact; 10 | import springfox.documentation.spi.DocumentationType; 11 | import springfox.documentation.spring.web.plugins.Docket; 12 | import springfox.documentation.swagger2.annotations.EnableSwagger2; 13 | /** 14 | * @author jie 15 | */ 16 | @Configuration 17 | @EnableSwagger2 18 | public class SwaggerConfig { 19 | @Bean 20 | public Docket buildDocket() { 21 | return new Docket (DocumentationType.SWAGGER_2) 22 | .apiInfo(buildApiInf()) 23 | .select() 24 | .apis(RequestHandlerSelectors.basePackage("com.github.mongodb.controller")) 25 | .paths(PathSelectors.any()) 26 | .build(); 27 | } 28 | 29 | private ApiInfo buildApiInf() { 30 | return new ApiInfoBuilder() 31 | .title("系统RESTful API文档") 32 | .contact(new Contact("jie", "https://github.com/itwwj/iot-project", "275236367@qq.com")) 33 | .version("1.0") 34 | .build(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /iot-mongodb/src/main/java/com/github/mongodb/controller/UserController.java: -------------------------------------------------------------------------------- 1 | package com.github.mongodb.controller; 2 | 3 | import com.github.mongodb.base.controller.SuperDataController; 4 | import com.github.mongodb.model.User; 5 | import com.github.mongodb.service.UserService; 6 | import io.swagger.annotations.Api; 7 | import org.springframework.web.bind.annotation.*; 8 | 9 | 10 | /** 11 | * @author jie 12 | */ 13 | @Api(value = "用户Controller") 14 | @RestController 15 | @RequestMapping("user") 16 | public class UserController extends SuperDataController { 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /iot-mongodb/src/main/java/com/github/mongodb/dao/UserDao.java: -------------------------------------------------------------------------------- 1 | package com.github.mongodb.dao; 2 | 3 | import com.github.mongodb.model.User; 4 | import org.springframework.data.mongodb.repository.MongoRepository; 5 | import org.springframework.stereotype.Repository; 6 | 7 | /** 8 | * @author jie 9 | */ 10 | @Repository 11 | public interface UserDao extends MongoRepository { 12 | } 13 | -------------------------------------------------------------------------------- /iot-mongodb/src/main/java/com/github/mongodb/model/User.java: -------------------------------------------------------------------------------- 1 | package com.github.mongodb.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import org.springframework.data.annotation.Id; 7 | import org.springframework.data.mongodb.core.mapping.Document; 8 | 9 | /** 10 | * @author jie 11 | */ 12 | @Data 13 | @NoArgsConstructor 14 | @AllArgsConstructor 15 | @Document(collection = "user") 16 | public class User { 17 | @Id 18 | private String id; 19 | 20 | private String name; 21 | 22 | private Integer age; 23 | 24 | private String description; 25 | } 26 | -------------------------------------------------------------------------------- /iot-mongodb/src/main/java/com/github/mongodb/service/UserService.java: -------------------------------------------------------------------------------- 1 | package com.github.mongodb.service; 2 | 3 | import com.github.mongodb.base.service.SupperService; 4 | import com.github.mongodb.dao.UserDao; 5 | import com.github.mongodb.model.User; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Service; 8 | 9 | import java.util.List; 10 | import java.util.Optional; 11 | 12 | /** 13 | * @author jie 14 | */ 15 | @Service 16 | public class UserService extends SupperService { 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /iot-mongodb/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | mongodb: 3 | address: 192.168.1.177:27017 4 | database: iot 5 | username: iot 6 | password: root 7 | connectionsPerHost: 50 8 | server: 9 | port: 9102 10 | -------------------------------------------------------------------------------- /iot-vue-mqtt/config/sysconstant.js: -------------------------------------------------------------------------------- 1 | export const MQTT_SERVICE = 'ws://192.168.1.177:8083/mqtt' 2 | export const MQTT_USERNAME = 'root' 3 | export const MQTT_PASSWORD = 'root' 4 | -------------------------------------------------------------------------------- /iot-vue-mqtt/src/components/Helloword.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 16 | -------------------------------------------------------------------------------- /iot-vue-mqtt/src/components/Vue-mqtt.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 59 | -------------------------------------------------------------------------------- /mqtt-integration/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | iot-project 7 | com.github.iot 8 | 1.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | mqtt-integration 13 | 14 | 15 | 16 | org.springframework.integration 17 | spring-integration-mqtt 18 | 19 | 20 | org.springframework.integration 21 | spring-integration-stream 22 | 23 | 24 | org.springframework.boot 25 | spring-boot-starter-web 26 | 27 | 28 | 29 | org.springframework.boot 30 | spring-boot-starter-test 31 | test 32 | 33 | 34 | org.springframework.boot 35 | spring-boot-configuration-processor 36 | true 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /mqtt-integration/src/main/java/com/gitee/iot/IntegrationApplication.java: -------------------------------------------------------------------------------- 1 | package com.gitee.iot; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | /** 7 | * @author jie 8 | */ 9 | @SpringBootApplication 10 | public class IntegrationApplication { 11 | public static void main(String[] args) { 12 | SpringApplication.run(IntegrationApplication.class, args); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /mqtt-integration/src/main/java/com/gitee/iot/controller/MqttController.java: -------------------------------------------------------------------------------- 1 | package com.gitee.iot.controller; 2 | 3 | import com.gitee.iot.mqtt.MqttSendHandler; 4 | import lombok.Data; 5 | import org.springframework.web.bind.annotation.GetMapping; 6 | import org.springframework.web.bind.annotation.RequestMapping; 7 | import org.springframework.web.bind.annotation.RestController; 8 | 9 | /** 10 | * @author jie 11 | */ 12 | @Data 13 | @RestController() 14 | @RequestMapping("mqtt") 15 | public class MqttController { 16 | private final MqttSendHandler sendHandler; 17 | 18 | 19 | @GetMapping("/send") 20 | public void send(String data) { 21 | sendHandler.sendToMqtt(data); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /mqtt-integration/src/main/java/com/gitee/iot/mqtt/MqttReceiveHandler.java: -------------------------------------------------------------------------------- 1 | package com.gitee.iot.mqtt; 2 | 3 | import com.alibaba.fastjson.JSON; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.springframework.context.annotation.Bean; 6 | import org.springframework.context.annotation.Configuration; 7 | import org.springframework.integration.annotation.ServiceActivator; 8 | import org.springframework.messaging.MessageHandler; 9 | 10 | /** 11 | * @author jie 12 | */ 13 | @Slf4j 14 | @Configuration 15 | public class MqttReceiveHandler { 16 | 17 | @Bean 18 | @ServiceActivator(inputChannel = "defaultMqttInputChannel") 19 | public MessageHandler defaultHandler() { 20 | return message -> { 21 | log.info( 22 | "defaultTopicReceiver\nheader:{},\npayload:{}", 23 | JSON.toJSONString(message.getHeaders(), true), 24 | JSON.toJSONString(message.getPayload(), true) 25 | ); 26 | }; 27 | } 28 | @Bean 29 | @ServiceActivator(inputChannel = "mqttInputChannel") 30 | public MessageHandler handler() { 31 | return message -> { 32 | log.info( 33 | "{}\nheader:{}, payload:{}", 34 | message.getHeaders().get("mqtt_receivedTopic"), 35 | JSON.toJSONString(message.getHeaders(), true), 36 | JSON.toJSONString(message.getPayload(), true) 37 | ); 38 | }; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /mqtt-integration/src/main/java/com/gitee/iot/mqtt/MqttSendHandler.java: -------------------------------------------------------------------------------- 1 | package com.gitee.iot.mqtt; 2 | 3 | import org.springframework.integration.annotation.MessagingGateway; 4 | import org.springframework.integration.mqtt.support.MqttHeaders; 5 | import org.springframework.messaging.handler.annotation.Header; 6 | 7 | /** 8 | * @author jie 9 | */ 10 | @MessagingGateway(defaultRequestChannel = "mqttOutChannel") 11 | public interface MqttSendHandler { 12 | /** 13 | * 使用 Default Topic & Default Qos 发送数据 14 | * 15 | * @param data string 16 | */ 17 | void sendToMqtt(String data); 18 | 19 | /** 20 | * 使用 Default Topic & 自定义 Qos 发送数据 21 | * 22 | * @param qos 自定义 Qos 23 | * @param data string 24 | */ 25 | void sendToMqtt(@Header(MqttHeaders.QOS) Integer qos, String data); 26 | 27 | /** 28 | * 使用 自定义 Topic & Default Qos 发送数据 29 | * 30 | * @param topic 自定义 Topic 31 | * @param data string 32 | */ 33 | void sendToMqtt(@Header(MqttHeaders.TOPIC) String topic, String data); 34 | 35 | /** 36 | * 使用 自定义 Topic & 自定义 Qos 发送数据 37 | * 38 | * @param topic 自定义 Topic 39 | * @param qos 自定义 Qos 40 | * @param data string 41 | */ 42 | void sendToMqtt(@Header(MqttHeaders.TOPIC) String topic, @Header(MqttHeaders.QOS) Integer qos, String data); 43 | } 44 | -------------------------------------------------------------------------------- /mqtt-integration/src/main/java/com/gitee/iot/property/MqttProperty.java: -------------------------------------------------------------------------------- 1 | package com.gitee.iot.property; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import org.springframework.boot.context.properties.ConfigurationProperties; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * @author jie 12 | */ 13 | @Data 14 | @AllArgsConstructor 15 | @NoArgsConstructor 16 | @ConfigurationProperties("mqtt") 17 | public class MqttProperty { 18 | private String username; 19 | 20 | private String password; 21 | 22 | private String url; 23 | 24 | private List qos; 25 | 26 | private Integer keepAlive; 27 | 28 | private Integer completionTimeout; 29 | 30 | private List topics; 31 | } 32 | -------------------------------------------------------------------------------- /mqtt-integration/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 9612 3 | 4 | mqtt: 5 | username: root 6 | password: root 7 | url: tcp://iot-server:1883 8 | qos: 9 | - 0 10 | topics: 11 | - device/# 12 | client: 13 | id: mqtt-client-${server.port} 14 | default: 15 | topic: device/iot 16 | qos: 1 17 | receive: 18 | enable: true 19 | keep-alive: 5 20 | completion-timeout: 3000 -------------------------------------------------------------------------------- /mqtt-test/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | iot-project 7 | com.github.iot 8 | 1.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | mqtt-test 13 | 14 | 2.3.6.RELEASE 15 | 16 | 17 | 18 | org.springframework.boot 19 | spring-boot-starter-web 20 | ${springboot.version} 21 | 22 | 23 | org.eclipse.paho 24 | org.eclipse.paho.client.mqttv3 25 | 1.2.2 26 | 27 | 28 | 29 | 30 | 31 | 32 | org.springframework.boot 33 | spring-boot-maven-plugin 34 | 35 | 36 | 37 | repackage 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /mqtt-test/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 1234 3 | --------------------------------------------------------------------------------