/// <reference types="node" />
export interface BrokerConfig {
    host: string;
}
export declare type TypeExchange = "fanout" | "direct" | "headers" | "topic";
export declare class BrokerProxy {
    private config;
    private queue;
    private exchanges;
    private channel;
    private connection;
    constructor(config: BrokerConfig);
    connect(): Promise<void>;
    /**
     * В случае использования подтверждения сообщений onAck параметр
     * будет определять размер предворительной выборки
     * @param n количество сообщений
     */
    prefetch(n?: number): Promise<void>;
    createChannel(queue: string, durable?: boolean): Promise<void>;
    createExchange(name: string, type: TypeExchange, durable?: boolean): Promise<void>;
    /**
     * Отправляет в брокер сообщений событие
     * @param queue Имя очереди
     * @param msg сообщение
     * @returns успех
     */
    emit<T>(queue: string, msg: T | Buffer): boolean;
    publish<T>(exchange: string, routingKey: string, msg: T | Buffer): boolean;
    bind<T>(exchange: string, routingKey: string, durable?: boolean): Promise<{
        subscribe: (fn: (msg?: T | undefined) => void) => void;
    }>;
    /**
     * Создаёт подписку на очередь
     * @param queue Очередь
     * @returns объект с возможностью подписаться через subscribe
     */
    on<T>(queue: string): {
        subscribe: (fn: (msg?: T | undefined) => void) => void;
    };
    /**
     * Создаёт синхронную подписку на очередь
     * @param queue Очередь
     * @returns объект с возможностью подписаться через subscribe
     */
    onAck<T>(queue: string): {
        subscribe: (fn: (msg?: T | undefined) => Promise<boolean>) => void;
    };
}
//# sourceMappingURL=BrokerProxy.d.ts.map