Skip to content

docs(@nestjs/microservices) Added RabbitMQ docs #118

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Oct 19, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions src/app/app-routing.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,14 @@ import { LoggerComponent } from './homepage/pages/techniques/logger/logger.compo
import { MongoComponent } from './homepage/pages/techniques/mongo/mongo.component';
import { MvcComponent } from './homepage/pages/techniques/mvc/mvc.component';
import { PerformanceComponent } from './homepage/pages/techniques/performance/performance.component';
import { HotReloadComponent } from './homepage/pages/techniques/hot-reload/hot-reload.component';
import { ConfigurationComponent } from './homepage/pages/techniques/configuration/configuration.component';
import { MigrationComponent } from './homepage/pages/migration/migration.component';
import { MqttComponent } from './homepage/pages/microservices/mqtt/mqtt.component';
import { NatsComponent } from './homepage/pages/microservices/nats/nats.component';
import { GrpcComponent } from './homepage/pages/microservices/grpc/grpc.component';
import { RabbitMQComponent } from './homepage/pages/microservices/rabbitmq/rabbitmq.component';
import { SupportComponent } from './homepage/pages/support/support.component';
import { SecurityComponent } from './homepage/pages/techniques/security/security.component';
import { SerializationComponent } from './homepage/pages/techniques/serialization/serialization.component';
import { SqlComponent } from './homepage/pages/techniques/sql/sql.component';
Expand Down Expand Up @@ -287,6 +295,11 @@ const routes: Routes = [
component: GrpcComponent,
data: { title: 'gRPC - Microservices' },
},
{
path: 'microservices/rabbitmq',
component: RabbitMQComponent,
data: { title: 'RabbitMQ - Microservices' },
},
{
path: 'microservices/pipes',
component: MicroservicesPipesComponent,
Expand Down
8 changes: 8 additions & 0 deletions src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,13 @@ import { CompressionComponent } from './homepage/pages/techniques/compression/co
import { ConfigurationComponent } from './homepage/pages/techniques/configuration/configuration.component';
import { FileUploadComponent } from './homepage/pages/techniques/file-upload/file-upload.component';
import { HotReloadComponent } from './homepage/pages/techniques/hot-reload/hot-reload.component';
import { ConfigurationComponent } from './homepage/pages/techniques/configuration/configuration.component';
import { MigrationComponent } from './homepage/pages/migration/migration.component';
import { MqttComponent } from './homepage/pages/microservices/mqtt/mqtt.component';
import { GrpcComponent } from './homepage/pages/microservices/grpc/grpc.component';
import { RabbitMQComponent } from './homepage/pages/microservices/rabbitmq/rabbitmq.component';
import { NatsComponent } from './homepage/pages/microservices/nats/nats.component';
import { SupportComponent } from './homepage/pages/support/support.component';
import { HttpModuleComponent } from './homepage/pages/techniques/http-module/http-module.component';
import { LoggerComponent } from './homepage/pages/techniques/logger/logger.component';
import { MongoComponent } from './homepage/pages/techniques/mongo/mongo.component';
Expand Down Expand Up @@ -180,6 +187,7 @@ const DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = {
MigrationComponent,
MqttComponent,
GrpcComponent,
RabbitMQComponent,
NatsComponent,
SupportComponent,
TocComponent,
Expand Down
1 change: 1 addition & 0 deletions src/app/homepage/menu/menu.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ export class MenuComponent implements OnInit {
{ title: 'MQTT', path: '/microservices/mqtt' },
{ title: 'NATS', path: '/microservices/nats' },
{ title: 'gRPC', path: '/microservices/grpc' },
{ title: 'RabbitMQ', path: '/microservices/rabbitmq' },
{
title: 'Exception filters',
path: '/microservices/exception-filters',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
<div class="content">
<h3>RabbitMQ</h3>
<p>
The <a href="https://www.rabbitmq.com/" target="blank">RabbitMQ</a> is the most widely deployed open source message broker.
</p>
<h4>Installation</h4>
<p>Before we start, we have to install required package:</p>
<pre><code class="language-bash">
$ npm i --save amqp</code></pre>
<h4>Transporter</h4>
<p>
In order to switch to <strong>RabbitMQ</strong> transporter, we need to modify an options object passed to the <code>createMicroservice()</code> method.
</p>
<span class="filename">
{{ 'main' | extension: optionsT.isJsActive }}
<app-tabs #optionsT></app-tabs>
</span>
<pre><code class="language-typescript">{{ options }}</code></pre>
<h4>Options</h4>
<p>
There are a bunch of available options that determine a transporter behavior.
</p>
<table>
<tr>
<td><code>url</code></td>
<td>Connection url </td>
</tr>
<tr>
<td><code>queue</code></td>
<td>Queue name which your server will listen</td>
</tr>
<tr>
<td><code>queueOptions</code></td>
<td>Additional options for creating a queue. They are well-described <a href="https://github.com/postwait/node-amqp" target="blank">here</a></td>
</tr>
</table>
<h4>Client</h4>
<p>
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).
</p>
<span class="filename">
{{ 'client' | extension: clientT.isJsActive }}
<app-tabs #clientT></app-tabs>
</span>
<pre><code class="language-typescript">{{ client }}</code></pre>
<p>
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.
</p>
<p>
To send a message and listen to reply simply use <code>send()</code> method:
</p>
<span class="filename">
{{ 'client' | extension: sendT.isJsActive }}
<app-tabs #sendT></app-tabs>
</span>
<pre><code class="language-typescript">{{ send }}</code></pre>
<p>
Where <code>MyInterfaceForMessage</code> and <code>MyInterfaceForReply</code> are interfaces for message and reply.
</p>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';
import { BasePageComponent } from '../../page/page.component';

@Component({
selector: 'app-rabbitmq',
templateUrl: './rabbitmq.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class RabbitMQComponent extends BasePageComponent {
get options() {
return `
const app = await NestFactory.createMicroservice(ApplicationModule, {
transport: Transport.RMQ,
options: {
url: \`amqp://$\{conf.user}:\${conf.password}@\${conf.host}\`,
queue: 'myqueue',
queueOptions: { durable: false }
},
});`;
}

get client() {
return `
this.client = ClientProxyFactory.create({
transport: Transport.RMQ,
options: {
url: \`amqp://\${conf.user}:\${conf.password}@\${conf.host}\`,
queue: 'myqueue',
queueOptions: { durable: false }
}
});`;
}

get send() {
return `
let pattern = { cmd: 'doit' };
this.client.send<MyInterfaceForMessage, MyInterfaceForReply>(pattern, 'myqueue').subscribe((x: MyInterfaceForReply) => {
console.log('I got resp: ' + x);
})`;
}

}
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