0.0.2 • Published 1 year ago

mqtt-sqlite3-store v0.0.2

Weekly downloads
-
License
ISC
Repository
github
Last release
1 year ago

Introduction

Simple MQTT temporary store with ratelimit output for QoS 1, 2 using sqlite3.

Storing message when devices offline is one of the most important feature of IoT Gateway. MQTT JS has recommended some library like MQTT level store, MQTT nedb store and MQTT localforage. Level store doesn't work well according to the issue which was reported long time ago by me, Local Forage only use for browser (I'm not sure about this :D), Nedb is fine but is doesn't rate limit the output stream. In case IoT Gateway, IoT Device or something else goes offline and keep collecting data for a week, there are a lot of data will be store in the database and if we don't rate limit the stream output, a huge amount of message will be sent to MQTT broker on the server. This may lead to server become overload.

Feature

  • Rate limit number of message when reconnect to mqtt broker
  • Store data with sqlite
  • Support outgoing message
  • Support incomming message

Usage

import mqtt from "mqtt";
import SQliteStore from "mqtt-sqlite3-store";

SQliteStore.createStores("./", { rateLimit: 100 }).then((store) => {
  const client = mqtt.connect({
    host: "localhost",
    outgoingStore: store.outgoing,
  });
  client.on("connect", () => {
    console.log("connected to mqtt broker");
  });
  client.publish("test", "hello word", { qos: 2 });
});

API

SQliteStore.createStore(path: string, options: Object): Promise

Async function which create new sqlite3 file

  • path: path to sqlite3 file location. Default "."

    Note: sqlite3 file will have name outgoing.

  • options:

    • rateLimit: Amount of message allow to publish from storage per second. Default 100. Note: this is not the mqtt client rate limit.