bb-inspired
Version:
Core library for BB-inspired NestJS backend
53 lines (52 loc) • 1.83 kB
TypeScript
export interface Message {
id: string;
type: string;
timestamp: Date;
payload: any;
metadata?: Record<string, any>;
}
export interface MessageBrokerOptions {
url: string;
connectionOptions?: Record<string, any>;
defaultExchange?: string;
defaultQueue?: string;
deadLetterExchange?: string;
deadLetterQueue?: string;
retryOptions?: {
maxRetries: number;
retryDelay: number;
exponentialBackoff?: boolean;
};
consumer?: {
prefetch?: number;
noAck?: boolean;
};
producer?: {
persistent?: boolean;
mandatory?: boolean;
};
}
export interface MessageHandler<T = any> {
handle(message: Message): Promise<void>;
messageType: string;
filter?(message: Message): boolean;
}
export interface MessagePublisher {
publish(routingKey: string, message: Omit<Message, 'id' | 'timestamp'>): Promise<void>;
publishToMany(routingKeys: string[], message: Omit<Message, 'id' | 'timestamp'>): Promise<void>;
publishWithOptions(routingKey: string, message: Omit<Message, 'id' | 'timestamp'>, options: Record<string, any>): Promise<void>;
}
export interface MessageConsumer {
subscribe(routingKey: string, handler: MessageHandler): Promise<void>;
unsubscribe(routingKey: string, handler?: MessageHandler): Promise<void>;
pause(): Promise<void>;
resume(): Promise<void>;
}
export interface MessageBroker extends MessagePublisher, MessageConsumer {
connect(): Promise<void>;
disconnect(): Promise<void>;
isConnected(): boolean;
createExchange(name: string, type: string, options?: Record<string, any>): Promise<void>;
createQueue(name: string, options?: Record<string, any>): Promise<void>;
bindQueue(queue: string, exchange: string, routingKey: string): Promise<void>;
}