@cleardu/rmq
Version:
Nest - modern, fast, powerful node.js web framework (@rmq)
88 lines (85 loc) • 2.76 kB
text/typescript
import { DynamicModule, Module } from '@nestjs/common';
import { RmqService } from './rmq.service';
import { RmqBroadcastModuleDefinition } from './rmq-broadcast.module-definition';
import { AmqpConnection, AmqpConnectionManager, RabbitMQModule } from '@golevelup/nestjs-rabbitmq';
@Module({
providers: [RmqService],
exports: [],
})
export class RmqBroadCastModule extends RmqBroadcastModuleDefinition.ConfigurableModuleClass {
static forRoot(options: { config: { uri: string } }): DynamicModule {
return {
module: RmqBroadCastModule,
imports: [
RabbitMQModule.forRoot(RabbitMQModule, {
exchanges: [
{
name: 'agent.exchange',
type: 'fanout',
},
{
name: 'call.exchange',
type: 'fanout',
},
],
uri: options.config.uri,
connectionInitOptions: { wait: false },
enableControllerDiscovery: true,
channels: {
'socket-channel': {
prefetchCount: 15,
default: true,
},
},
}),
],
exports: [
RabbitMQModule,
RmqBroadCastModule,
AmqpConnection,
AmqpConnectionManager,
],
};
}
static forRootAsync(
options: typeof RmqBroadcastModuleDefinition.ASYNC_OPTIONS_TYPE,
): DynamicModule {
return {
module: RmqBroadCastModule,
imports: [
...(options.imports || []),
RabbitMQModule.forRootAsync(RabbitMQModule,
{
useFactory: async (...args) => {
const opt = await options.useFactory!(...args);
return {
exchanges: [
{
name: 'agent.exchange',
type: 'fanout',
},
{
name: 'call.exchange',
type: 'fanout',
},
],
uri: opt.config?.uri || '',
connectionInitOptions: { wait: false },
enableControllerDiscovery: true,
channels: {
'socket-channel': {
prefetchCount: 15,
default: true,
},
},
};
},
inject: (options.inject as any) || [],
imports: options.imports || [],
}
),
],
exports: [RabbitMQModule, RmqBroadCastModule],
};
}
}