MQTT message client to, you know, send messages
npm i @khaosdoctor/hermod
const { MessageClient: Hermod } = require('@khaosdoctor/hermod')
const config = {
queueHostname: 'localhost'
}
const messenger = new Hermod(config)
messenger.postMessage('message', 'queueName') // Returns a promise
const { MessageClient: Hermod } = require('@khaosdoctor/hermod')
const config = {
queueHostname: 'localhost'
}
const messenger = new Hermod(config)
function handler (message) {
console.log(message.content.toString())
}
// Will call `handler` everytime a message arrives
messenger.listenToQueue('queueName', handler)
const { MessageClient: Hermod } = require('@khaosdoctor/hermod')
const config = {
queueHostname: 'localhost'
}
function handler (message) {
console.log(message.content.toString())
}
const messenger = new Hermod(config)
messenger.listenToQueue('queueName', handler)
messenger.changeQueue('anotherQueue').then((queueObject) => /* ... */)
Acking
const { MessageClient: Hermod } = require('@khaosdoctor/hermod')
const config = {
queueHostname: 'localhost'
}
const messenger = new Hermod(config)
function handler (message) {
console.log(message.content.toString())
messenger.ackMessage(message)
}
messenger.listenToQueue('queueName', handler)
Nacking
const { MessageClient: Hermod } = require('@khaosdoctor/hermod')
const config = {
queueHostname: 'localhost'
}
const messenger = new Hermod(config)
function handler (message) {
console.log(message.content.toString())
messenger.nackMessage(message)
}
messenger.listenToQueue('queueName', handler)
Rejecting
const { MessageClient: Hermod } = require('@khaosdoctor/hermod')
const config = {
queueHostname: 'localhost'
}
const messenger = new Hermod(config)
function handler (message) {
console.log(message.content.toString())
messenger.rejectMessage(message)
}
messenger.listenToQueue('queueName', handler)
Hermod takes a config object like the following:
{
queueHostname: string
queueName?: string
queueProtocol?: 'amqp' | 'amqps'
queuePort?: number
username?: string
password?: string
maxConnectionAttemps?: number
connectionRetryInterval?: number
durable?: boolean
noAck?: boolean
persistent?: boolean
}
undefined
amqp
or amqps
depending on your implementation, defaults to amqp
5672
, which is rabbitMQ's default port5
1000
true
false
true
Channel, queue and message configurations such as
persistent
,durable
andnoAck
can be passed on directly to the function, if not the default config will have the claim
postMessage (message: any, queueName?: string, persistent?: boolean): Promise<boolean>
Description: Posts message
to queueName
. If queueName
is null
or undefined
, the config.queueName
will be used
Parameters:
message
(required): Message content to be posted, it needs to be something which can be transformed into a Buffer (with Buffer.from
)queueName
: Optional queueName to override the queue from the default configuration (if any)persistent
: Setting it will override the config.persistent
valueReturns: Boolean value indicating succes of operation
listenToQueue (queueName: string, handler: MessageHandler, noAck?: boolean, durable?: boolean): Promise<{ consumerTag: string }>
Description: Start consuming queueName
. Everytime a new message arrives, handler
will be called
Parameters:
queueName
(required): Queue name to be listened. This method does not read the default config.queueName
handler
(required): Function which will handle the message. Must have a signature like (message) => any
noAck
: This will override config.noAck
value for this specific consumerdurable
: This will override config.durable
value for this specific consumerReturns: Promise with the new consumer tag
changeQueue (queueName: string, durable?: boolean): Promise<{ queue: string, messageCount: number, consumerCount: number }>
Description: Will assert a new queue on the channel
Parameters:
queueName
(required): Name of the queue to be asserteddurable
: Will override config.durable
value for this specific queueReturns:
ackMessage (message: ConsumeMessage, allUpToThis: boolean = false): void
Description: Acknowledges a message
Parameters:
message
(required): The received message objectallUpToThis
: Will acknowledge all messages before the one being sent as wellnackMessage (message: ConsumeMessage, allUpToThis: boolean = false, requeue: boolean = true): void
Description: Nacks a message, requeuing it by default
Parameters:
message
(required): The received message objectallUpToThis
: Will not acknowledge all messages before the one being sent as wellrequeue
: Will also requeue the messagerejectMessage (message: ConsumeMessage, requeue: boolean = false): void
Description: Rejects a message, not requeuing it by default
Parameters:
message
(required): The received message objectrequeue
: Will also requeue the message