import { ICallback, ILogger, IRedisClient, Runnable } from 'redis-smq-common';
import { TProducerEvent } from '../event-bus/index.js';
import { ExchangeDirect, ExchangeFanout, ExchangeTopic, IExchangeParsedParams } from '../exchange/index.js';
import { ProducibleMessage } from '../message/index.js';
import { MessageEnvelope } from '../message/message-envelope.js';
import { IQueueParams } from '../queue-manager/index.js';
import { PubSubTargetResolver } from './pub-sub-target-resolver.js';
export declare class Producer extends Runnable<TProducerEvent> {
    protected fanoutExchange: ExchangeFanout;
    protected directExchange: ExchangeDirect;
    protected topicExchange: ExchangeTopic;
    protected logger: ILogger;
    protected pubSubTargetResolver: PubSubTargetResolver | null;
    protected redisClient: IRedisClient | null;
    constructor();
    protected getRedisClient(): IRedisClient;
    protected _runPubSubTargetResolver: (cb: ICallback) => void;
    protected _shutdownPubSubTargetResolver: (cb: ICallback) => void;
    protected goingUp(): ((cb: ICallback) => void)[];
    protected finalizeUp(): void;
    protected goingDown(): ((cb: ICallback) => void)[];
    protected finalizeDown(): void;
    protected getPubSubTargetResolver(): PubSubTargetResolver;
    protected _dispatch(message: MessageEnvelope, queue: IQueueParams, cb: ICallback<string>): void;
    protected _produceToQueue(message: ProducibleMessage, queue: IQueueParams, cb: ICallback<string[]>): void;
    protected _matchExchangeQueues(exchange: IExchangeParsedParams, routingKey: string | null, cb: ICallback<IQueueParams[]>): void;
    produce(msg: ProducibleMessage): Promise<string[]>;
    produce(msg: ProducibleMessage, cb: ICallback<string[]>): void;
}
//# sourceMappingURL=producer.d.ts.map