import * as amqplib from 'amqplib';
export declare type MessageHandler = (msg: any) => any;
/**
 * Broker for async messaging
 */
export declare abstract class MessageBroker {
    queues: any;
    connection?: amqplib.Connection;
    _channel?: amqplib.Channel;
    get channel(): amqplib.Channel;
    /**
     * Trigger init connection method
     */
    constructor();
    /**
     * Initialize connection to rabbitMQ
     */
    init(): Promise<MessageBroker>;
    /**
    
      /**
       * Send message to queue
       * @param {String} queue Queue name
       * @param {Object} msg Message as Buffer
       */
    send(queue: string, msg: any): Promise<boolean>;
    sendWithReply(queue: string, msg: any): Promise<unknown>;
    /**
     * @param {String} queue Queue name
     * @param {Function} handler Handler that will be invoked with given message and acknowledge function (msg, ack)
     */
    subscribe(queue: string, handler: MessageHandler): Promise<() => Promise<void>>;
    unsubscribe(queue: string, handler: MessageHandler): Promise<void>;
}
