MQTT系列实践二 在EGG中使用mqtt

egg.js配置

一.首先安装egg-mqtt插件

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 });      
}   
 };  
};
复制代码

7.一些说明

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

感谢您的阅读

相关文章
相关标签/搜索