Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to use RabbitMQ and REST-API in Nest App?

Good Day!

I'm trying to implement 2 microservices that communicate with each other through a message broker. But one of them should accept Http requests via REST-Api. Unfortunately, I don't understand how to make the microservice listen to both the message queue and incoming HTTP requests. Perhaps I don’t understand something in the paradigm of communication through a message broker, but how then to receive requests from the client and forward them to the microservice architecture?

Main.ts

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import {Transport, MicroserviceOptions} from '@nestjs/microservices'

async function bootstrap() {
  const app = await NestFactory.createMicroservice<MicroserviceOptions>(AppModule, {
    transport: Transport.RMQ,
    options: {
      urls: ['amqp://rabbitmq:5672'],
      queue: 'hello_world',
      queueOptions: {
        durable: false
      },
    },
  });
  await app.listen();
}
bootstrap();

As you can see, now the application is not listening on port 3000 as in the standard approach. What should be done?

like image 884
MiyRon Avatar asked Dec 29 '25 13:12

MiyRon


1 Answers

The answer turned out to be quite simple. NEST js has hybrid apps. You can get to know them here https://docs.nestjs.com/faq/hybrid-application#hybrid-application. Thanks everyone

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import {Transport, MicroserviceOptions} from '@nestjs/microservices'

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  const microservice = app.connectMicroservice({
    transport: Transport.RMQ,
    options: {
      urls: ['amqp://rabbitmq:5672'],
      queue: 'hello_world',
      queueOptions: {
        durable: false
      },
    },
  });

  await app.startAllMicroservices();
  await app.listen(3000);
}
bootstrap();
like image 162
MiyRon Avatar answered Jan 01 '26 04:01

MiyRon