///
import { Options } from "amqplib";
import { RabbitMQConfiguration } from "../configuration";
export declare type AMQPExchangeType = "direct" | "topic" | "fanout";
export declare type AMQPConsumeFunc = (message: Readonly, ...args: any[]) => void;
export declare type AMQPProducer = Readonly<{
exchange: string;
type: AMQPExchangeType;
publishOptions: Options.Publish;
}>;
export declare type AMQPConsumer = Readonly<{
exchange?: string;
type?: AMQPExchangeType;
bindingKey?: string;
queue?: string;
queueOptions: Options.AssertQueue;
consumeFunc: AMQPConsumeFunc;
consumeFuncArgs?: any[];
consumeOptions: Options.Consume;
}>;
export declare type ReturnListener = (exchange: string, routingKey: string, message: Buffer) => void;
export declare class AMQPBus {
private readonly appID;
private readonly connectOptions;
private readonly producer?;
private readonly consumer?;
private readonly heartbeatTimeout;
readonly ready: Promise;
private connection;
private channel;
private readonly connectionName;
private readonly pending;
private state;
private reconnectTimerID;
private heartbeatTimerID;
private returnListener;
/**
* @desc 构造函数
* @param appID 应用ID
* @param connectOptions RabbitMQ连接参数
* @param producer 生成者
* @param consumer 消费者
* @param heartbeatTimeout 应用层心跳超时, 单位: ms
*/
constructor(appID: string, connectOptions: RabbitMQConfiguration, producer?: Readonly<{
exchange: string;
type: AMQPExchangeType;
publishOptions: Options.Publish;
}> | undefined, consumer?: Readonly<{
exchange?: string | undefined;
type?: AMQPExchangeType | undefined;
bindingKey?: string | undefined;
queue?: string | undefined;
queueOptions: Options.AssertQueue;
consumeFunc: AMQPConsumeFunc;
consumeFuncArgs?: any[] | undefined;
consumeOptions: Options.Consume;
}> | undefined, heartbeatTimeout?: number);
setReturnListener: (l: ReturnListener) => this;
protected isHeartbeat(message: Readonly): boolean;
private connect;
/**
* @desc 生产者
* @param messages
* @param routingKey
*/
produce: (messages: string | ReadonlyArray, routingKey: string) => boolean;
/**
* @desc 正常关闭, 如进程退出前包括收到SIGINT
*/
close: () => Promise;
/**
* @desc 应用层心跳超时, 如FreeSwitch HEARTBEAT事件
*/
private closeByHeartbeatTimeout;
private enterNormalDisconnected;
private enterAbnormalDisconnecting;
private enterAbnormalDisConnected;
/**
* @desc 初始化交换机
* @param exchange 交换机名, 一般总是预先配置的Exchange
* @param type 交换机主题类型
* @returns 交换机名
*/
private initExchange;
/**
* @desc 初始化消费队列
* @returns
*/
private initQueue;
private onDrain;
/**
* @desc 应用层在连接成功和收到心跳时调用
*/
protected resetHeartbeatTimer: () => void;
private startHeartbeatTimer;
private stopHeartbeatTimer;
private startReconnectTimer;
private stopReconnectTimer;
private stopTimers;
private isDisconnected;
private isDisconnect;
private isNormalDisconnect;
private isAbnormalDisconnect;
private URI;
}