npm install egg-emqtt --save複製代碼
//config/plugin.ts
emqtt:{ enable:true, package:'egg-emqtt', },
複製代碼
//config/config.default.ts
config.emqtt={
client:{
host:'mqtt://你的mqtt服務器地址',
username:'server',
password:'admin',
clientId:'egg',
options: {
keepalive: 60,
protocolId: 'MQTT',
protocolVersion: 4,
clean: true,
reconnectPeriod: 1000,
connectTimeout: 30 * 1000,
rejectUnauthorized: false,
},
msgMiddleware: [ 'msg2json' ],
}
};
複製代碼
//app/mqtt/controller
//app/mqtt/middleware複製代碼
//app/router.ts
//第一個參數爲topic,第二個參數爲controller設置,插件文檔中有部分錯誤,此處代碼,應爲以下代碼,請以本代碼爲準
app.emqtt.route('test',app.mqtt.controller.dzbp.index);
複製代碼
//app/mqtt/middleware/msg2json.ts
//JSON格式化中間件,格式化請求內容,並log到bash中
module.exports = () => {
return async (ctx, next) => {module.exports = () => {
return async (ctx, next) => { try { ctx.req.message = JSON.parse(ctx.req.msg); } catch (err) { ctx.logger.error(err); } await next(); ctx.logger.info(`Response_Time: ${ctx.starttime ? Date.now() - ctx.starttime : 0}ms Topic:${ctx.req.topic} Msg: ${ctx.req.msg}`); }; };
複製代碼
//app/mqtt/controller/dzbp.ts
//mqtt控制器,處理mqtt請求
module.exports = (app) => { return class ServerController extends app.Controller { async index(){
//emqtt.publish方法 向指定topic推送消息,第一個參數爲topic,第二個參數爲消息內容,第三個參數爲QOS
await this.app.emqtt.publish(this.ctx.req.message.name, '收到消息內容爲:'+this.ctx.req.message.msg, { qos: 0 });
}
};
};
複製代碼
1.若是配置了多個客戶端,則能夠使用app.emqtt.get(instanceName)獲取特定的mqtt實例,並像上面那樣使用它。
javascript
2.因爲插件做者沒有提供d.ts文件,因此TS開發下,會報錯,vscode中能夠右鍵添加定義,或者使用TSLINT的提示功能添加定義,或者在egg的index.d.ts文件中添加定義,其餘編輯器自行尋找解決辦法。java
3.爲何不使用mqtt.js?npm
一方面項目基於egg.js構建 使用插件更加方便,mqtt.js示例在第一篇教程中已經給出,其餘問題能夠參考文檔json