RabbitMQ Entegrasyonu
NestJS mikro hizmetleriniz arasında sağlam eşzamansız iletişim sağlamak için RabbitMQ'yu ileti aracısı olarak entegre edin.
RabbitMQ Entegrasyonu, CoddyKit'te ücretsiz bir NestJS Enterprise Backend APIs dersidir. Bu, 3 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, NestJS Enterprise Backend APIs öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. NestJS Enterprise Backend APIs kursu toplamda 3 dersten oluşur.
Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.
Meet RabbitMQ
Welcome to integrating RabbitMQ with NestJS! RabbitMQ is a popular message broker that helps different parts of your application communicate reliably.
Think of it as a post office for your application's messages. Services can drop off messages, and other services can pick them up when they're ready.
Why Use Message Queues?
In a microservices architecture, direct communication can lead to tight coupling. Message queues solve this by enabling asynchronous communication.
- Decoupling: Services don't need to know about each other directly.
- Resilience: If a service is down, messages wait in the queue.
- Scalability: Easily add more consumers to process messages faster.
- Load Balancing: Distribute tasks among multiple workers.
Key RabbitMQ Concepts
Let's quickly define the essential terms:
- Producer: An application that sends messages to the queue.
- Consumer: An application that receives and processes messages from the queue.
- Queue: A buffer that stores messages. Messages wait here until a consumer picks them up.
- Message: The data payload sent by a producer and consumed by a consumer.
NestJS & RabbitMQ Transporter
NestJS provides excellent support for microservices using various transporters. RabbitMQ is one such transporter, enabling robust inter-service communication.
You'll configure your NestJS applications as either a client (producer) that sends messages, or a microservice (consumer) that listens for and processes messages.
Running RabbitMQ Locally
Before integrating, you need a running RabbitMQ instance. The easiest way for local development is using Docker:
docker run -d --hostname my-rabbit --name some-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3-managementThis command starts a RabbitMQ server on port 5672 (for AMQP) and 15672 (for management UI).
Producer App Entry Point
This main.ts file is the entry point for a NestJS application configured to act as a producer. It starts an HTTP server that can trigger message sending.
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
console.log('Producer HTTP Gateway running on port 3000');
}
bootstrap();Producer Client Configuration
To send messages, the producer NestJS app needs a client proxy. Configure the ClientsModule in your AppModule to define this RabbitMQ client.
The name ('MESSAGE_SERVICE') is a token used for dependency injection.
import { Module } from '@nestjs/common';
import { ClientsModule, Transport } from '@nestjs/microservices';
import { AppController } from './app.controller';
@Module({
imports: [
ClientsModule.register([
{
name: 'MESSAGE_SERVICE',
transport: Transport.RMQ,
options: {
urls: ['amqp://localhost:5672'],
queue: 'my_nest_queue',
queueOptions: { durable: false },
},
},
]),
],
controllers: [AppController],
})
export class AppModule {}Sending an Event Message
Now, inject the configured ClientProxy into a controller or service. Use client.emit() to send an event message to the RabbitMQ queue.
emit() is used for event-based communication where no response is expected.
import { Controller, Get, Inject } from '@nestjs/common';
import { ClientProxy } from '@nestjs/microservices';
@Controller('events')
export class AppController {
constructor(@Inject('MESSAGE_SERVICE') private client: ClientProxy) {}
@Get('publish')
async publishEvent() {
const payload = { id: 101, text: 'Hello from producer!' };
this.client.emit('message_event', payload);
return 'Event sent to RabbitMQ!';
}
}Consumer Microservice Entry
This main.ts bootstraps a NestJS application as a microservice. It listens for messages from the specified RabbitMQ queue, acting as a consumer.
Notice NestFactory.createMicroservice instead of create.
import { NestFactory } from '@nestjs/core';
import { MicroserviceOptions, Transport } from '@nestjs/microservices';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.createMicroservice<MicroserviceOptions>(
AppModule,
{
transport: Transport.RMQ,
options: {
urls: ['amqp://localhost:5672'],
queue: 'my_nest_queue',
queueOptions: { durable: false },
},
},
);
await app.listen();
console.log('Consumer Microservice is listening on RabbitMQ queue!');
}
bootstrap();Processing Incoming Messages
In your consumer service, use the @MessagePattern() decorator to define methods that will handle specific messages from the queue.
It's crucial to acknowledge (ack()) messages to inform RabbitMQ they've been processed successfully.
import { Injectable } from '@nestjs/common';
import { MessagePattern, RmqContext, Ctx, Payload } from '@nestjs/microservices';
@Injectable()
export class AppService {
@MessagePattern('message_event')
handleMessage(@Payload() data: any, @Ctx() context: RmqContext) {
console.log('Received message:', data);
const channel = context.getChannelRef();
const originalMsg = context.getMessage();
channel.ack(originalMsg);
return { status: 'success', data: data };
}
}RabbitMQ Quick Check
You've learned how to set up producers and consumers. Let's test your understanding!
Recap: RMQ Integration
You've successfully learned the basics of integrating RabbitMQ with NestJS!
- RabbitMQ enables asynchronous, decoupled communication.
- NestJS uses transporters like RabbitMQ for microservices.
- You configured a NestJS app as a producer (client) to send messages using
client.emit(). - You configured another NestJS app as a consumer (microservice) to receive messages using
@MessagePattern(). - Remember to acknowledge messages for reliability.
This is a powerful pattern for building scalable and robust microservices!
Sıkça Sorulan Sorular
“RabbitMQ Entegrasyonu” dersi ücretsiz mi?
Evet — “RabbitMQ Entegrasyonu” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve NestJS Enterprise Backend APIs kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. NestJS Enterprise Backend APIs kursu toplamda 3 dersten oluşur.
“RabbitMQ Entegrasyonu” dersinde ne öğreneceğim?
NestJS mikro hizmetleriniz arasında sağlam eşzamansız iletişim sağlamak için RabbitMQ'yu ileti aracısı olarak entegre edin. NestJS Enterprise Backend APIs ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
NestJS Enterprise Backend APIs öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te NestJS Enterprise Backend APIs, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 3 dersinin 2. dersidir.
“RabbitMQ Entegrasyonu” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu NestJS Enterprise Backend APIs dersinde kod yazıp çalıştırabilir miyim?
Evet. Her NestJS Enterprise Backend APIs dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- NestJS Mikro Hizmetlerine Genel Bakış
- RabbitMQ Entegrasyonu
- Hizmetler Arası İletişim