hiot-kafka
Version:
hiot-app middleware to bootstrap kafka
43 lines (34 loc) • 1.12 kB
JavaScript
// Expects a callback argument which returns a promise.
// Uses that promise to call either `ack` or `reject` on the envelope
module.exports = (callback, options, logger, handleError) => {
let baseLogDetails = { label: "hiot-kafka-handle-envelope" };
logger.info(baseLogDetails, "Setting up handler");
return (envelope) => {
baseLogDetails.topic = envelope.topic;
logger.info(
baseLogDetails,
`Received message for topic: ${envelope.topic}`
);
return callback(envelope.message, options)
.then((metadata) => {
logger.info(
{ ...baseLogDetails, status: "ack", metadata },
`Received success for ${envelope.topic}`
);
envelope.ack();
})
.catch((err) => {
logger.fatal(
{
...baseLogDetails,
status: "reject",
message: envelope.message,
err: { message: err.message, stack: err.stack },
},
`Got error processing ${envelope.topic}`
);
handleError(err, { extra: { envelope } });
envelope.reject();
});
};
};