Ninety-nine Pitchers of Malt

    mqtt-typedi
    TypeScript icon, indicating that this package has built-in type declarations

    0.1.2 • Public • Published

    mqtt-typedi

    About

    An elegant way to use publisher/consumer pattern with MQTT in Typedi container. Project is dependent on typedi container & mqtt

    Installation

    • peer dependencies

    npm install mqtt typedi --save

    • package

    npm install mqtt-typedi --save

    Enable decorators/metadata options in tsconfig.json

    {
      "experimentalDecorators": true,
      "emitDecoratorMetadata": true
    }

    Usage

    Create client and set it into Typedi container under Client type key

    import { Container } from 'typedi';
    import * as mqtt from 'mqtt';
    import { Client } from 'mqtt';
     
    const client = mqtt.connect('mqtt://localhost', {
        username: 'admin',
        password: 'public',
    });
     
    Container.set(Client, client);

    Publisher.ts

    import { Service } from 'typedi';
    import { Publisher, PublisherInterface } from 'mqtt-typedi';
     
    @Service()
    @Publisher('cool')
    export class CoolPublisher implements PublisherInterface {
        publish(message: string): any {
         return message;
        }
    }

    another_file.ts

    import { CoolPublisher } from './CoolPublisher';
    import { Container } from 'typedi';
     
    const publisher = Container.get<CoolPublisher>(CoolPublisher);
    publisher.publish('Hello mqtt-typedi');

    Consumer.ts

    import { Service } from 'typedi';
    import { Consumer, ConsumerInterface } from 'mqtt-typedi';
     
    @Service()
    @Consumer('cool')
    export class CoolConsumer implements ConsumerInterface {
        consume(topic: string, message: string): any {
            console.log({ topic, message }); // method will be called when new message appears on `cool` topic
        }
    }

    another_file.ts

    import { CoolConsumer } from './CoolConsumer';
     
    const consumer = new CoolConsumer(); //initialize consumer

    Subscribe options

    In Publisher/Consumer decorators is available to pass subscribe options, however this is not mandatory, default QoS is 0

    to pass options

    @Publisher('cool', {
        qos: 2,
        rh: true,
        ...
    })

    same for consumer

    Install

    npm i mqtt-typedi

    DownloadsWeekly Downloads

    4

    Version

    0.1.2

    License

    ISC

    Unpacked Size

    5.99 kB

    Total Files

    4

    Last publish

    Collaborators

    • tycjan