Skip to content

Commit dae0731

Browse files
Merge pull request nestjs#118 from AlariCode/feature/rmq-transport
docs(@nestjs/microservices) Added RabbitMQ docs
2 parents faff0ae + 80fd0ea commit dae0731

File tree

5 files changed

+124
-0
lines changed

5 files changed

+124
-0
lines changed

src/app/app-routing.module.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,14 @@ import { LoggerComponent } from './homepage/pages/techniques/logger/logger.compo
6666
import { MongoComponent } from './homepage/pages/techniques/mongo/mongo.component';
6767
import { MvcComponent } from './homepage/pages/techniques/mvc/mvc.component';
6868
import { PerformanceComponent } from './homepage/pages/techniques/performance/performance.component';
69+
import { HotReloadComponent } from './homepage/pages/techniques/hot-reload/hot-reload.component';
70+
import { ConfigurationComponent } from './homepage/pages/techniques/configuration/configuration.component';
71+
import { MigrationComponent } from './homepage/pages/migration/migration.component';
72+
import { MqttComponent } from './homepage/pages/microservices/mqtt/mqtt.component';
73+
import { NatsComponent } from './homepage/pages/microservices/nats/nats.component';
74+
import { GrpcComponent } from './homepage/pages/microservices/grpc/grpc.component';
75+
import { RabbitMQComponent } from './homepage/pages/microservices/rabbitmq/rabbitmq.component';
76+
import { SupportComponent } from './homepage/pages/support/support.component';
6977
import { SecurityComponent } from './homepage/pages/techniques/security/security.component';
7078
import { SerializationComponent } from './homepage/pages/techniques/serialization/serialization.component';
7179
import { SqlComponent } from './homepage/pages/techniques/sql/sql.component';
@@ -287,6 +295,11 @@ const routes: Routes = [
287295
component: GrpcComponent,
288296
data: { title: 'gRPC - Microservices' },
289297
},
298+
{
299+
path: 'microservices/rabbitmq',
300+
component: RabbitMQComponent,
301+
data: { title: 'RabbitMQ - Microservices' },
302+
},
290303
{
291304
path: 'microservices/pipes',
292305
component: MicroservicesPipesComponent,

src/app/app.module.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,13 @@ import { CompressionComponent } from './homepage/pages/techniques/compression/co
7575
import { ConfigurationComponent } from './homepage/pages/techniques/configuration/configuration.component';
7676
import { FileUploadComponent } from './homepage/pages/techniques/file-upload/file-upload.component';
7777
import { HotReloadComponent } from './homepage/pages/techniques/hot-reload/hot-reload.component';
78+
import { ConfigurationComponent } from './homepage/pages/techniques/configuration/configuration.component';
79+
import { MigrationComponent } from './homepage/pages/migration/migration.component';
80+
import { MqttComponent } from './homepage/pages/microservices/mqtt/mqtt.component';
81+
import { GrpcComponent } from './homepage/pages/microservices/grpc/grpc.component';
82+
import { RabbitMQComponent } from './homepage/pages/microservices/rabbitmq/rabbitmq.component';
83+
import { NatsComponent } from './homepage/pages/microservices/nats/nats.component';
84+
import { SupportComponent } from './homepage/pages/support/support.component';
7885
import { HttpModuleComponent } from './homepage/pages/techniques/http-module/http-module.component';
7986
import { LoggerComponent } from './homepage/pages/techniques/logger/logger.component';
8087
import { MongoComponent } from './homepage/pages/techniques/mongo/mongo.component';
@@ -180,6 +187,7 @@ const DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = {
180187
MigrationComponent,
181188
MqttComponent,
182189
GrpcComponent,
190+
RabbitMQComponent,
183191
NatsComponent,
184192
SupportComponent,
185193
TocComponent,

src/app/homepage/menu/menu.component.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ export class MenuComponent implements OnInit {
115115
{ title: 'MQTT', path: '/microservices/mqtt' },
116116
{ title: 'NATS', path: '/microservices/nats' },
117117
{ title: 'gRPC', path: '/microservices/grpc' },
118+
{ title: 'RabbitMQ', path: '/microservices/rabbitmq' },
118119
{
119120
title: 'Exception filters',
120121
path: '/microservices/exception-filters',
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
<div class="content">
2+
<h3>RabbitMQ</h3>
3+
<p>
4+
The <a href="https://www.rabbitmq.com/" target="blank">RabbitMQ</a> is the most widely deployed open source message broker.
5+
</p>
6+
<h4>Installation</h4>
7+
<p>Before we start, we have to install required package:</p>
8+
<pre><code class="language-bash">
9+
$ npm i --save amqp</code></pre>
10+
<h4>Transporter</h4>
11+
<p>
12+
In order to switch to <strong>RabbitMQ</strong> transporter, we need to modify an options object passed to the <code>createMicroservice()</code> method.
13+
</p>
14+
<span class="filename">
15+
{{ 'main' | extension: optionsT.isJsActive }}
16+
<app-tabs #optionsT></app-tabs>
17+
</span>
18+
<pre><code class="language-typescript">{{ options }}</code></pre>
19+
<h4>Options</h4>
20+
<p>
21+
There are a bunch of available options that determine a transporter behavior.
22+
</p>
23+
<table>
24+
<tr>
25+
<td><code>url</code></td>
26+
<td>Connection url </td>
27+
</tr>
28+
<tr>
29+
<td><code>queue</code></td>
30+
<td>Queue name which your server will listen</td>
31+
</tr>
32+
<tr>
33+
<td><code>queueOptions</code></td>
34+
<td>Additional options for creating a queue. They are well-described <a href="https://github.com/postwait/node-amqp" target="blank">here</a></td>
35+
</tr>
36+
</table>
37+
<h4>Client</h4>
38+
<p>
39+
In order to connect with Client, we are creating the <code>ClientProxy</code> instance using the <code>ClientProxyFactory</code> (exported from <code>@nestjs/microservices</code> package).
40+
</p>
41+
<span class="filename">
42+
{{ 'client' | extension: clientT.isJsActive }}
43+
<app-tabs #clientT></app-tabs>
44+
</span>
45+
<pre><code class="language-typescript">{{ client }}</code></pre>
46+
<p>
47+
In <code>queue</code>, we define queue that our server is listening. You don't have to worry about reply queue, NestJS will create it for each client. But each server needs a unique queue. You can use multiple instanсes of your server to balance your load.
48+
</p>
49+
<p>
50+
To send a message and listen to reply simply use <code>send()</code> method:
51+
</p>
52+
<span class="filename">
53+
{{ 'client' | extension: sendT.isJsActive }}
54+
<app-tabs #sendT></app-tabs>
55+
</span>
56+
<pre><code class="language-typescript">{{ send }}</code></pre>
57+
<p>
58+
Where <code>MyInterfaceForMessage</code> and <code>MyInterfaceForReply</code> are interfaces for message and reply.
59+
</p>
60+
</div>
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';
2+
import { BasePageComponent } from '../../page/page.component';
3+
4+
@Component({
5+
selector: 'app-rabbitmq',
6+
templateUrl: './rabbitmq.component.html',
7+
changeDetection: ChangeDetectionStrategy.OnPush,
8+
})
9+
export class RabbitMQComponent extends BasePageComponent {
10+
get options() {
11+
return `
12+
const app = await NestFactory.createMicroservice(ApplicationModule, {
13+
transport: Transport.RMQ,
14+
options: {
15+
url: \`amqp://$\{conf.user}:\${conf.password}@\${conf.host}\`,
16+
queue: 'myqueue',
17+
queueOptions: { durable: false }
18+
},
19+
});`;
20+
}
21+
22+
get client() {
23+
return `
24+
this.client = ClientProxyFactory.create({
25+
transport: Transport.RMQ,
26+
options: {
27+
url: \`amqp://\${conf.user}:\${conf.password}@\${conf.host}\`,
28+
queue: 'myqueue',
29+
queueOptions: { durable: false }
30+
}
31+
});`;
32+
}
33+
34+
get send() {
35+
return `
36+
let pattern = { cmd: 'doit' };
37+
this.client.send<MyInterfaceForMessage, MyInterfaceForReply>(pattern, 'myqueue').subscribe((x: MyInterfaceForReply) => {
38+
console.log('I got resp: ' + x);
39+
})`;
40+
}
41+
42+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy