@webda/amqp
Version:
Implements AMQP on webda
64 lines • 1.63 kB
JavaScript
import { JSONUtils, Queue, QueueParameters } from "@webda/core";
import * as amqplib from "amqplib";
export class AMQPQueueParameters extends QueueParameters {
}
/**
* Implements a Queue stored in AMQP
*
* @WebdaModda
*/
export default class AMQPQueue extends Queue {
/**
* @override
*/
loadParameters(params) {
return new AMQPQueueParameters(params);
}
/**
* @override
*/
async init() {
await super.init();
this.conn = await amqplib.connect(this.parameters.url);
this.channel = await this.conn.createChannel();
await this.channel.assertQueue(this.parameters.queue, this.parameters.queueOptions);
return this;
}
/**
* @override
*/
async sendMessage(event) {
await this.channel.sendToQueue(this.parameters.queue, Buffer.from(JSONUtils.stringify(event)));
}
/**
* @override
*/
async receiveMessage(proto) {
let msg = await this.channel.get(this.parameters.queue);
if (msg === false) {
return [];
}
return [
{
ReceiptHandle: msg,
Message: this.unserialize(msg.content.toString(), proto)
}
];
}
/**
* @override
*/
async deleteMessage(id) {
await this.channel.ack(id);
}
/**
* @override
*/
async size() {
return (await this.channel.assertQueue(this.parameters.queue)).messageCount;
}
async ___cleanData() {
await this.channel.purgeQueue(this.parameters.queue);
}
}
//# sourceMappingURL=queue.js.map