1.3.5-beta.1 • Published 5 years ago

egg-emqx v1.3.5-beta.1

Weekly downloads
2
License
MIT
Repository
github
Last release
5 years ago

egg-emqx

mqtt client based on mqtt for egg framework

forked by luofeng1/egg-emqtt

Install

$ npm i egg-emqx --save

Configuration

Change ${app_root}/config/plugin.js to enable mqtt plugin:

exports.emqx = {
  enable: true,
  package: 'egg-emqx',
};

Configure mqtt information in ${app_root}/config/config.default.js:

Single Client

config.emqx = {
  client: {
    host: 'mqtt://xxx.xxx.xxx.xxx',
    password: 'xxxxx',
    username: 'xxxxx',
    clientId: 'xxxxx',
    options: {
      keepalive: 60,
      protocolId: 'MQTT',
      protocolVersion: 4,
      clean: true,
      reconnectPeriod: 1000,
      connectTimeout: 30 * 1000,
      rejectUnauthorized: false,
      ...
    },
    msgMiddleware: [ 'xxxx' ],
  },
}

Multi Clients

config.emqx = {
  clients: {
    foo: {
      host: 'mqtt://xxx.xxx.xxx.xxx',
      password: 'xxxxx',
      username: 'xxxxx',
      clientId: 'xxxxx',
      options: {
        keepalive: 60,
        protocolId: 'MQTT',
        protocolVersion: 4,
        clean: true,
        reconnectPeriod: 1000,
        connectTimeout: 30 * 1000,
        rejectUnauthorized: false,
        ...
      },
      msgMiddleware: [ 'xxxx' ],
    },
    bar: {
      ...
    },
  }
}

See mqtt API Documentation for all available options.

Usage

In controller, you can use app.emqx to get the mqtt instance, check mqtt to see how to use.

// app/router.js

module.exports = app => {
    const { router } = app;
    router.get('/', app.emqx.controller.home.index);

    // mqtt_client,subscribe topic: a
    app.emqx.route('a', app.mqtt.controller.home.index, app.mqtt.controller.home.index2);
};

// app/mqtt/controller/home.js

module.exports = app => {
  return class HomeController extends app.Controller {
    async index() {
      /**
       * ctx.req = {
       *    topic: 'a',
       *    msg: 'xxxxxxxxxxxx',
       * }
       */ 
      // publish
      await this.app.emqx.publish('topic1', 'msg123456', { qos: 0 });
    }

    async index2() {
      console.log('index2');
    }
  };
};

// app/mqtt/middleware/msg2json.js
module.exports = () => {
  return async (ctx, next) => {
    try {
        ctx.logger.info(ctx.req.message);
        ctx.logger.info(ctx.req.msg);
        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}`);
  };
};

Multi Clients

If your Configure with multi clients, you can use app.emqx.get(instanceName) to get the specific mqtt instance and use it like above.

Questions & Suggestions

Please open an issue here.

License

MIT

1.3.5-beta.1

5 years ago

1.3.4

5 years ago

1.3.3

5 years ago

1.3.2

5 years ago

1.3.1

5 years ago

1.3.0

5 years ago

1.2.0

5 years ago

1.1.1

5 years ago

1.1.0

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago