I have main app with connected webSockets, but also, I have RabbitMQ microservice with methods where I want to send message to client by websockets. Could you assist with connection?
Here is my app.module main.ts
async function bootstrap() { const logger = new WinstonLogger();
const app = await NestFactory.create(AppModule, {
logger,
});
const configService = app.get(ConfigService);
const port = configService.get<number>('PORT');
const origin = configService.get<string>('ORIGIN');
if (origin) {
app.enableCors({
allowedHeaders: ['Content-Type', 'Authorization'],
origin,
credentials: true,
});
}
app.setGlobalPrefix('api');
app.useGlobalPipes(
new ValidationPipe({
transform: true,
transformOptions: {
enableImplicitConversion: true,
},
whitelist: true,
}),
);
app.useGlobalInterceptors(new ClassSerializerInterceptor(app.get('Reflector')));
app.use(cookieParser());
await app.listen(port).catch((error) => logger.error(error.message, error.toString()));
logger.log(`Server started on port ${port}`);
bootstrap();
}
And my microservice main.ts
async function bootstrap() {
const logger = new WinstonLogger();
const configService = new ConfigService();
const urls = configService.get<string>('RMQ_URLS').split(',');
const queue = configService.get<string>('RCOM_DEVICE_IN');
const app = await NestFactory.createMicroservice<MicroserviceOptions>(RcomParserModule, {
transport: Transport.RMQ,
options: {
urls,
queue,
queueOptions: {
durable: false,
},
},
logger,
});
await app.listen();
}
bootstrap();
How to use method from rabbitMQ to send websocket messages
See my websocket.ts file
import {
WebSocketGateway,
WebSocketServer,
OnGatewayConnection,
SubscribeMessage,
OnGatewayDisconnect,
MessageBody,
ConnectedSocket,
} from '@nestjs/websockets';
import { Server, Socket } from 'socket.io';
import { ApiTags, ApiOperation, ApiOkResponse } from '@nestjs/swagger';
import { WebsocketMessageDto, PingEventDto } from './websocket.events.dto';
import { IWebsocketGatewayMessage } from './websocket.gateway.interface';
@WebSocketGateway({ namespace: 'events' })
@ApiTags('websocket')
export class WebsocketGateway implements OnGatewayConnection, OnGatewayDisconnect {
@WebSocketServer()
server: Server;
@ApiOperation({ summary: 'Event: alarmEvent' })
@ApiOkResponse({
description: 'Message sent successfully.',
type: WebsocketMessageDto,
})
handleAlarmMessage(message: IWebsocketGatewayMessage) {
this.server.emit('alarmEvent', message);
}
@ApiOperation({ summary: 'Event: eventLogEvent' })
@ApiOkResponse({
description: 'Message sent successfully.',
type: WebsocketMessageDto,
})
handleEventLogMessage(message: IWebsocketGatewayMessage) {
this.server.emit('eventLogEvent', message);
}
@ApiOperation({ summary: 'Event: ping' })
@SubscribeMessage('ping')
handlePing(@ConnectedSocket() client: Socket, @MessageBody() data: PingEventDto) {
console.log(`Received ping from client ${client.id}: ${data.message}`);
client.emit('ping', {
message: 'PONG',
});
}
handleConnection(client: Socket) {
console.log(`Client connected: ${client.id}`);
}
handleDisconnect(client: Socket) {
console.log(`Client disconnected: ${client.id}`);
}
}
Please, help! Thanks.
I tried to make the microservice as another app with own port