@rxap/nest-amqp
Version:
@rxap/nest-amqp
1,918 lines • 76.4 kB
HTML
<!doctype html>
<html class="no-js" lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title>nest-rabbitmq</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="../images/favicon.ico">
<link rel="stylesheet" href="../styles/style.css">
<link rel="stylesheet" href="../styles/dark.css">
</head>
<body>
<script>
// Blocking script to avoid flickering dark mode
// Dark mode toggle button
var useDark = window.matchMedia('(prefers-color-scheme: dark)');
var darkModeState = useDark.matches;
var $darkModeToggleSwitchers = document.querySelectorAll('.dark-mode-switch input');
var $darkModeToggles = document.querySelectorAll('.dark-mode-switch');
var darkModeStateLocal = localStorage.getItem('compodoc_darkmode-state');
function checkToggle(check) {
for (var i = 0; i < $darkModeToggleSwitchers.length; i++) {
$darkModeToggleSwitchers[i].checked = check;
}
}
function toggleDarkMode(state) {
if (window.localStorage) {
localStorage.setItem('compodoc_darkmode-state', state);
}
checkToggle(state);
const hasClass = document.body.classList.contains('dark');
if (state) {
for (var i = 0; i < $darkModeToggles.length; i++) {
$darkModeToggles[i].classList.add('dark');
}
if (!hasClass) {
document.body.classList.add('dark');
}
} else {
for (var i = 0; i < $darkModeToggles.length; i++) {
$darkModeToggles[i].classList.remove('dark');
}
if (hasClass) {
document.body.classList.remove('dark');
}
}
}
useDark.addEventListener('change', function (evt) {
toggleDarkMode(evt.matches);
});
if (darkModeStateLocal) {
darkModeState = darkModeStateLocal === 'true';
}
toggleDarkMode(darkModeState);
</script>
<div class="navbar navbar-default navbar-fixed-top d-md-none p-0">
<div class="d-flex">
<a href="../" class="navbar-brand">nest-rabbitmq</a>
<button type="button" class="btn btn-default btn-menu ion-ios-menu" id="btn-menu"></button>
</div>
</div>
<div class="xs-menu menu" id="mobile-menu">
<div id="book-search-input" role="search"><input type="text" placeholder="Type to search"></div> <compodoc-menu></compodoc-menu>
</div>
<div class="container-fluid main">
<div class="row main">
<div class="d-none d-md-block menu">
<compodoc-menu mode="normal"></compodoc-menu>
</div>
<!-- START CONTENT -->
<div class="content class">
<div class="content-data">
<ol class="breadcrumb">
<li class="breadcrumb-item">Classes</li>
<li class="breadcrumb-item" >ServerRMQ</li>
</ol>
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item">
<a href="#info"
class="nav-link"
class="nav-link active"
role="tab" id="info-tab" data-bs-toggle="tab" data-link="info">Info</a>
</li>
<li class="nav-item">
<a href="#source"
class="nav-link"
role="tab" id="source-tab" data-bs-toggle="tab" data-link="source">Source</a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane fade active in" id="info">
<p class="comment">
<h3>File</h3>
</p>
<p class="comment">
<code>src/lib/server-rmq.ts</code>
</p>
<p class="comment">
<h3>Extends</h3>
</p>
<p class="comment">
<code>Server</code>
</p>
<p class="comment">
<h3>Implements</h3>
</p>
<p class="comment">
<code>CustomTransportStrategy</code>
</p>
<section data-compodoc="block-index">
<h3 id="index">Index</h3>
<table class="table table-sm table-bordered index-table">
<tbody>
<tr>
<td class="col-md-4">
<h6><b>Properties</b></h6>
</td>
</tr>
<tr>
<td class="col-md-4">
<ul class="index-list">
<li>
<span class="modifier">Protected</span>
<a href="#channel" >channel</a>
</li>
<li>
<span class="modifier">Protected</span>
<a href="#connectionAttempts" >connectionAttempts</a>
</li>
<li>
<span class="modifier">Protected</span>
<a href="#errorSerializer" >errorSerializer</a>
</li>
<li>
<span class="modifier">Protected</span>
<a href="#queue" >queue</a>
</li>
<li>
<span class="modifier">Protected</span>
<a href="#server" >server</a>
</li>
<li>
<span class="modifier">Public</span>
<span class="modifier">Readonly</span>
<a href="#transportId" >transportId</a>
</li>
</ul>
</td>
</tr>
<tr>
<td class="col-md-4">
<h6><b>Methods</b></h6>
</td>
</tr>
<tr>
<td class="col-md-4">
<ul class="index-list">
<li>
<span class="modifier">Public</span>
<span class="modifier"></span>
<a href="#addHandler" >addHandler</a>
</li>
<li>
<span class="modifier">Public</span>
<a href="#bindQueue" >bindQueue</a>
</li>
<li>
<span class="modifier">Public</span>
<a href="#close" >close</a>
</li>
<li>
<span class="modifier">Public</span>
<a href="#createClient" >createClient</a>
</li>
<li>
<span class="modifier">Public</span>
<span class="modifier"></span>
<span class="modifier">Async</span>
<a href="#handleEvent" >handleEvent</a>
</li>
<li>
<span class="modifier">Public</span>
<span class="modifier">Async</span>
<a href="#handleMessage" >handleMessage</a>
</li>
<li>
<span class="modifier">Protected</span>
<span class="modifier"></span>
<a href="#initializeDeserializer" >initializeDeserializer</a>
</li>
<li>
<span class="modifier">Protected</span>
<span class="modifier"></span>
<a href="#initializeSerializer" >initializeSerializer</a>
</li>
<li>
<span class="modifier">Public</span>
<span class="modifier">Async</span>
<a href="#listen" >listen</a>
</li>
<li>
<span class="modifier">Public</span>
<span class="modifier"></span>
<a href="#send" >send</a>
</li>
<li>
<span class="modifier">Public</span>
<a href="#sendMessage" >sendMessage</a>
</li>
<li>
<span class="modifier">Public</span>
<span class="modifier">Async</span>
<a href="#setupChannel" >setupChannel</a>
</li>
<li>
<span class="modifier">Public</span>
<span class="modifier">Async</span>
<a href="#start" >start</a>
</li>
</ul>
</td>
</tr>
</tbody>
</table>
</section>
<section data-compodoc="block-constructor">
<h3 id="constructor">Constructor</h3>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<code>constructor(options: <a href="../interfaces/ServerRmqOptions.html" target="_self">ServerRmqOptions</a>, logger: LoggerService)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="61" class="link-to-prism">src/lib/server-rmq.ts:61</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div>
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>options</td>
<td>
<code><a href="../interfaces/ServerRmqOptions.html" target="_self" >ServerRmqOptions</a></code>
</td>
<td>
No
</td>
</tr>
<tr>
<td>logger</td>
<td>
<code>LoggerService</code>
</td>
<td>
No
</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
</tbody>
</table>
</section>
<section data-compodoc="block-properties">
<h3 id="inputs">
Properties
</h3>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="channel"></a>
<span class="name">
<span class="modifier">Protected</span>
<span ><b>channel</b></span>
<a href="#channel"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code>ChannelWrapper | null</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Default value : </i><code>null</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="57" class="link-to-prism">src/lib/server-rmq.ts:57</a></div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="connectionAttempts"></a>
<span class="name">
<span class="modifier">Protected</span>
<span ><b>connectionAttempts</b></span>
<a href="#connectionAttempts"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/number" target="_blank" >number</a></code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Default value : </i><code>0</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="58" class="link-to-prism">src/lib/server-rmq.ts:58</a></div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="errorSerializer"></a>
<span class="name">
<span class="modifier">Protected</span>
<span ><b>errorSerializer</b></span>
<a href="#errorSerializer"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Default value : </i><code>new ErrorSerializer()</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="61" class="link-to-prism">src/lib/server-rmq.ts:61</a></div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="queue"></a>
<span class="name">
<span class="modifier">Protected</span>
<span ><b>queue</b></span>
<a href="#queue"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="59" class="link-to-prism">src/lib/server-rmq.ts:59</a></div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="server"></a>
<span class="name">
<span class="modifier">Protected</span>
<span ><b>server</b></span>
<a href="#server"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code>IAmqpConnectionManager | null</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Default value : </i><code>null</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="56" class="link-to-prism">src/lib/server-rmq.ts:56</a></div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="transportId"></a>
<span class="name">
<span class="modifier">Public</span>
<span class="modifier">Readonly</span>
<span ><b>transportId</b></span>
<a href="#transportId"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Default value : </i><code>TRANSPORT_ID</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="54" class="link-to-prism">src/lib/server-rmq.ts:54</a></div>
</td>
</tr>
</tbody>
</table>
</section>
<section data-compodoc="block-methods">
<h3 id="methods">
Methods
</h3>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="addHandler"></a>
<span class="name">
<span class="modifier">Public</span>
<span class="modifier"></span>
<span ><b>addHandler</b></span>
<a href="#addHandler"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="modifier-icon icon ion-ios-reset"></span>
<code>addHandler(pattern: <a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank">any</a>, callback: MessageHandler, isEventHandler?: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/boolean" target="_blank">boolean</a>, extras?: Record<any | any>)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="297"
class="link-to-prism">src/lib/server-rmq.ts:297</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>pattern</td>
<td>
<code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >any</a></code>
</td>
<td>
No
</td>
</tr>
<tr>
<td>callback</td>
<td>
<code>MessageHandler</code>
</td>
<td>
No
</td>
</tr>
<tr>
<td>isEventHandler</td>
<td>
<code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/boolean" target="_blank" >boolean</a></code>
</td>
<td>
Yes
</td>
</tr>
<tr>
<td>extras</td>
<td>
<code>Record<any | any></code>
</td>
<td>
Yes
</td>
</tr>
</tbody>
</table>
</div>
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code>
</div>
<div class="io-description">
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="bindQueue"></a>
<span class="name">
<span class="modifier">Public</span>
<span ><b>bindQueue</b></span>
<a href="#bindQueue"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="modifier-icon icon ion-ios-reset"></span>
<code>bindQueue(exchange: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank">string</a>, routingKey: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank">string</a>)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="88"
class="link-to-prism">src/lib/server-rmq.ts:88</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>exchange</td>
<td>
<code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code>
</td>
<td>
No
</td>
</tr>
<tr>
<td>routingKey</td>
<td>
<code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code>
</td>
<td>
No
</td>
</tr>
</tbody>
</table>
</div>
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >any</a></code>
</div>
<div class="io-description">
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="close"></a>
<span class="name">
<span class="modifier">Public</span>
<span ><b>close</b></span>
<a href="#close"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="modifier-icon icon ion-ios-reset"></span>
<code>close()</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="83"
class="link-to-prism">src/lib/server-rmq.ts:83</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="createClient"></a>
<span class="name">
<span class="modifier">Public</span>
<span ><b>createClient</b></span>
<a href="#createClient"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="modifier-icon icon ion-ios-reset"></span>
<code>createClient()</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="167"
class="link-to-prism">src/lib/server-rmq.ts:167</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >any</a></code>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="handleEvent"></a>
<span class="name">
<span class="modifier">Public</span>
<span class="modifier"></span>
<span class="modifier">Async</span>
<span ><b>handleEvent</b></span>
<a href="#handleEvent"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="modifier-icon icon ion-ios-reset"></span>
<code>handleEvent(pattern: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank">string</a>, packet: ReadPacket, context: RmqContext)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="267"
class="link-to-prism">src/lib/server-rmq.ts:267</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>pattern</td>
<td>
<code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code>
</td>
<td>
No
</td>
</tr>
<tr>
<td>packet</td>
<td>
<code>ReadPacket</code>
</td>
<td>
No
</td>
</tr>
<tr>
<td>context</td>
<td>
<code>RmqContext</code>
</td>
<td>
No
</td>
</tr>
</tbody>
</table>
</div>
<div class="io-description">
<b>Returns : </b> <code>Promise<any></code>
</div>
<div class="io-description">
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="handleMessage"></a>
<span class="name">
<span class="modifier">Public</span>
<span class="modifier">Async</span>
<span ><b>handleMessage</b></span>
<a href="#handleMessage"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="modifier-icon icon ion-ios-reset"></span>
<code>handleMessage(message: Record<string | any>, channel: <a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank">any</a>)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="201"
class="link-to-prism">src/lib/server-rmq.ts:201</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>message</td>
<td>
<code>Record<string | any></code>
</td>
<td>
No
</td>
</tr>
<tr>
<td>channel</td>
<td>
<code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >any</a></code>
</td>
<td>
No
</td>
</tr>
</tbody>
</table>
</div>
<div class="io-description">
<b>Returns : </b> <code>Promise<void></code>
</div>
<div class="io-description">
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="initializeDeserializer"></a>
<span class="name">
<span class="modifier">Protected</span>
<span class="modifier"></span>
<span ><b>initializeDeserializer</b></span>
<a href="#initializeDeserializer"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="modifier-icon icon ion-ios-reset"></span>
<code>initializeDeserializer(options: <a href="../interfaces/ServerRmqOptions.html" target="_self">ServerRmqOptions</a>)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="307"
class="link-to-prism">src/lib/server-rmq.ts:307</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>options</td>
<td>
<code><a href="../interfaces/ServerRmqOptions.html" target="_self" >ServerRmqOptions</a></code>
</td>
<td>
No
</td>
</tr>
</tbody>
</table>
</div>
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code>
</div>
<div class="io-description">
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="initializeSerializer"></a>
<span class="name">
<span class="modifier">Protected</span>
<span class="modifier"></span>
<span ><b>initializeSerializer</b></span>
<a href="#initializeSerializer"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="modifier-icon icon ion-ios-reset"></span>
<code>initializeSerializer(options: <a href="../interfaces/ServerRmqOptions.html" target="_self">ServerRmqOptions</a>)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="311"
class="link-to-prism">src/lib/server-rmq.ts:311</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>options</td>
<td>
<code><a href="../interfaces/ServerRmqOptions.html" target="_self" >ServerRmqOptions</a></code>
</td>
<td>
No
</td>
</tr>
</tbody>
</table>
</div>
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code>
</div>
<div class="io-description">
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="listen"></a>
<span class="name">
<span class="modifier">Public</span>
<span class="modifier">Async</span>
<span ><b>listen</b></span>
<a href="#listen"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="modifier-icon icon ion-ios-reset"></span>
<code>listen(callback: (undefined,optionalParams: []) => void)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="73"
class="link-to-prism">src/lib/server-rmq.ts:73</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>callback</td>
<td>
<code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/function" target="_blank" >function</a></code>
</td>
<td>
No
</td>
</tr>
</tbody>
</table>
</div>
<div class="io-description">
<b>Returns : </b> <code>Promise<void></code>
</div>
<div class="io-description">
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="send"></a>
<span class="name">
<span class="modifier">Public</span>
<span class="modifier"></span>
<span ><b>send</b></span>
<a href="#send"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="modifier-icon icon ion-ios-reset"></span>
<code>send(stream$: Observable<any>, respond: (data: WritePacket) => void)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="136"
class="link-to-prism">src/lib/server-rmq.ts:136</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>stream$</td>
<td>
<code>Observable<any></code>
</td>
<td>
No
</td>
</tr>
<tr>
<td>respond</td>
<td>
<code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/function" target="_blank" >function</a></code>
</td>
<td>
No
</td>
</tr>
</tbody>
</table>
</div>
<div class="io-description">
<b>Returns : </b> <code>Subscription</code>
</div>
<div class="io-description">
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="sendMessage"></a>
<span class="name">
<span class="modifier">Public</span>
<span ><b>sendMessage</b></span>
<a href="#sendMessage"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="modifier-icon icon ion-ios-reset"></span>
<code>sendMessage(message: T, replyTo: <a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank">any</a>, correlationId: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank">string</a>)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="282"
class="link-to-prism">src/lib/server-rmq.ts:282</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<b>Type parameters :</b>
<ul class="type-parameters">
<li>T</li>
</ul>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>message</td>
<td>
<code>T</code>
</td>
<td>
No
</td>
</tr>
<tr>
<td>replyTo</td>
<td>
<code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >any</a></code>
</td>
<td>
No
</td>
</tr>
<tr>
<td>correlationId</td>
<td>
<code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code>
</td>
<td>
No
</td>
</tr>
</tbody>
</table>
</div>
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code>
</div>
<div class="io-description">
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="setupChannel"></a>
<span class="name">
<span class="modifier">Public</span>
<span class="modifier">Async</span>
<span ><b>setupChannel</b></span>
<a href="#setupChannel"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="modifier-icon icon ion-ios-reset"></span>
<code>setupChannel(channel: ChannelWrapper, callback?: () => void)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="172"
class="link-to-prism">src/lib/server-rmq.ts:172</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>channel</td>
<td>
<code>ChannelWrapper</code>
</td>
<td>
No
</td>
</tr>
<tr>
<td>callback</td>
<td>
<code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/function" target="_blank" >function</a></code>
</td>
<td>
Yes
</td>
</tr>
</tbody>
</table>
</div>
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >any</a></code>
</div>
<div class="io-description">
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="start"></a>
<span class="name">
<span class="modifier">Public</span>
<span class="modifier">Async</span>
<span ><b>start</b></span>
<a href="#start"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="modifier-icon icon ion-ios-reset"></span>
<code>start(callback?: (undefined,optionalParams?: []) => void)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="93"
class="link-to-prism">src/lib/server-rmq.ts:93</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>callback</td>
<td>
<code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/function" target="_blank" >function</a></code>
</td>
<td>
Yes
</td>
</tr>
</tbody>
</table>
</div>
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >any</a></code>
</div>
<div class="io-description">
</div>
</td>
</tr>
</tbody>
</table>
</section>
</div>
<div class="tab-pane fade tab-source-code" id="source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {
Logger,
LoggerService,
} from '@nestjs/common';
import {
isNil,
isString,
isUndefined,
} from '@nestjs/common/utils/shared.utils';
import {
CustomTransportStrategy,
IncomingRequest,
MessageHandler,
OutgoingResponse,
ReadPacket,
RmqContext,
Server,
WritePacket,
} from '@nestjs/microservices';
import {
CONNECT_EVENT,
CONNECT_FAILED_EVENT,
CONNECTION_FAILED_MESSAGE,
DISCONNECT_EVENT,
DISCONNECTED_RMQ_MESSAGE,
NO_MESSAGE_HANDLER,
RQM_NO_EVENT_HANDLER,
RQM_NO_MESSAGE_HANDLER,
} from '@nestjs/microservices/constants';
import { RmqRecordSerializer } from '@nestjs/microservices/serializers';
import { ServerRmqOptions } from './options';
import { coerceArray } from '@rxap/utilities';
import {
ChannelWrapper,
connect,
} from 'amqp-connection-manager';
import type { IAmqpConnectionManager } from 'amqp-connection-manager/dist/types/AmqpConnectionManager';
import { Message } from 'amqplib';
import {
catchError,
EMPTY,
finalize,
Observable,
Subscription,
} from 'rxjs';
import { ErrorSerializer } from './error.serializer';
import { RabbitMqIncomingRequestDeserializer } from './incoming-request.deserializer';
const INFINITE_CONNECTION_ATTEMPTS = -1;
export const TRANSPORT_ID = Symbol('RxAP_RMQ');
export class ServerRMQ extends Server implements CustomTransportStrategy {
public readonly transportId = TRANSPORT_ID;
protected server: IAmqpConnectionManager | null = null;
protected channel: ChannelWrapper | null = null;
protected connectionAttempts = 0;
protected queue!: string;
protected errorSerializer = new ErrorSerializer();
constructor(
protected readonly options: ServerRmqOptions,
protected override readonly logger: LoggerService = new Logger(Server.name),
) {
super();
this.initializeSerializer(options);
this.initializeDeserializer(options);
}
public async listen(
callback: (err?: unknown, ...optionalParams: unknown[]) => void,
): Promise<void> {
try {
await this.start(callback);
} catch (err) {
callback(err);
}
}
public close(): void {
this.channel && this.channel.close();
this.server && this.server.close();
}
public bindQueue(exchange: string, routingKey: string) {
this.logger.verbose?.(`Binding queue to exchange '${ exchange }' with routing key '${ routingKey }'`, 'ServerRMQ');
return this.channel!.bindQueue(this.queue, exchange, routingKey);
}
public async start(
callback?: (err?: unknown, ...optionalParams: unknown[]) => void,
) {
this.logger.verbose?.('Connecting to RMQ server...', 'ServerRMQ');
this.server = this.createClient();
this.server.on(CONNECT_EVENT, () => {
if (this.channel) {
return;
}
this.channel = this.server!.createChannel({
json: false,
setup: (channel: any) => this.setupChannel(channel, callback),
});
});
const maxConnectionAttempts = this.getOptionsProp(
this.options,
'maxConnectionAttempts',
INFINITE_CONNECTION_ATTEMPTS,
);
this.server.on(DISCONNECT_EVENT, (err: any) => {
this.logger.error(DISCONNECTED_RMQ_MESSAGE);
this.logger.error(err);
});
this.server.on(CONNECT_FAILED_EVENT, (error: Record<string, unknown>) => {
this.logger.error(CONNECTION_FAILED_MESSAGE);
if (error?.['err']) {
this.logger.error(error['err']);
}
const isReconnecting = !!this.channel;
if (
maxConnectionAttempts === INFINITE_CONNECTION_ATTEMPTS ||
isReconnecting
) {
return;
}
if (++this.connectionAttempts === maxConnectionAttempts) {
this.close();
callback?.(error?.['err'] ?? new Error(CONNECTION_FAILED_MESSAGE));
}
});
}
public override send(
stream$: Observable<any>,
respond: (data: WritePacket) => unknown | Promise<unknown>,
): Subscription {
let dataBuffer: WritePacket[] | null = null;
const scheduleOnNextTick = (data: WritePacket) => {
if (!dataBuffer) {
dataBuffer = [data];
process.nextTick(async () => {
for (const item of dataBuffer!) {
await respond(item);
}
dataBuffer = null;
});
} else if (!data.isDisposed) {
dataBuffer = dataBuffer.concat(data);
} else {
dataBuffer[dataBuffer.length - 1].isDisposed = data.isDisposed;
}
};
return stream$
.pipe(
catchError((err: any) => {
scheduleOnNextTick({ err: this.errorSerializer.serialize(err) });
return EMPTY;
}),
finalize(() => scheduleOnNextTick({ isDisposed: true })),
)
.subscribe((response: any) => scheduleOnNextTick({ response }));
}
public createClient() {
const socketOptions = this.getOptionsProp(this.options, 'socketOptions');
return connect(this.options.urls, socketOptions);
}
public async setupChannel(channel: ChannelWrapper, callback?: () => any) {
if (!this.options.noAssert) {
for (const exchange of coerceArray(this.options.exchange)) {
await channel.assertExchange(exchange.name, exchange.type, exchange.options);
}
const { queue } = await channel.assertQueue(this.options.queue ?? '', this.options.queueOptions);
this.queue = queue;
} else {
this.queue = this.options.queue ?? '';
}
const r = await (
channel as any
).prefetch(this.options.prefetchCount ?? 0, this.options.isGlobalPrefetchCount);
channel.consume(
this.queue,
(msg: Record<string, any>) => this.handleMessage(msg, channel),
{
prefetch: this.options.prefetchCount ?? 0,
noAck: this.options.noAck ?? true,
consumerTag: this.getOptionsProp(
this.options,
'consumerTag',
undefined,
),
},
);
callback?.();
}
public async handleMessage(
message: Record<string, any>,
channel: any,
): Promise<void> {
this.logger.debug?.('Message received', 'ServerRMQ');
if (isNil(message)) {
return;
}
const {
content,
properties,
fields,
} = message;
const rawMessage = this.parseMessageContent(content);
this.logger.verbose?.('Message content: %JSON', rawMessage, 'ServerRMQ');
this.logger.verbose?.('Message properties: %JSON', properties, 'ServerRMQ');
this.logger.verbose?.('Message fields: %JSON', fields, 'ServerRMQ');
const packet = await this.deserializer.deserialize(rawMessage, {
fields,
properties,
});
this.logger.debug?.('Extracted packet message content: %JSON', packet, 'ServerRMQ');
const pattern = (
isString(packet.pattern) ? packet.pattern : JSON.stringify(packet.pattern)
);
const rmqContext = new RmqContext([ message, channel, pattern ]);
if (isUndefined((
packet as IncomingRequest
).id)) {
this.logger.debug?.('Message without correlation id', 'ServerRMQ');
return this.handleEvent(pattern, packet, rmqContext);
}
const handler = this.getHandlerByPattern(pattern);
if (!handler) {
if (!(
this.options.noAck ?? true
)) {
this.logger.warn(RQM_NO_MESSAGE_HANDLER`${ pattern }`);
this.channel!.nack(rmqContext.getMessage() as Message, false, false);
}
const status = 'error';
const noHandlerPacket = {
id: (
packet as IncomingRequest
).id,
err: NO_MESSAGE_HANDLER,
status,
};
return this.sendMessage(
noHandlerPacket,
properties.replyTo,
properties.correlationId,
);
}
const response$ = this.transformToObservable(
await handler(packet.data, rmqContext),
);
const publish = <T>(data: T) =>
this.sendMessage(data, properties.replyTo, properties.correlationId);
this.logger.debug?.('Handling event and sending response', 'ServerRMQ');
response$ && this.send(response$, publish);
}
public override async handleEvent(
pattern: string,
packet: ReadPacket,
context: RmqContext,
): Promise<any> {
const handler = this.getHandlerByPattern(pattern);
if (!handler && !(
this.options.noAck ?? true
)) {
this.channel!.nack(context.getMessage() as Message, false, false);
return this.logger.warn(RQM_NO_EVENT_HANDLER`${ pattern }`);
}
return super.handleEvent(pattern, packet, context);
}
public sendMessage<T = any>(
message: T,
replyTo: any,
correlationId: string,
): void {
const outgoingResponse = this.serializer.serialize(
message as unknown as OutgoingResponse,
);
const options = outgoingResponse.options;
delete outgoingResponse.options;
const buffer = Buffer.from(JSON.stringify(outgoingResponse));
this.channel!.sendToQueue(replyTo, buffer, { correlationId, ...options });
}
public override addHandler(
pattern: any,
callback: MessageHandler,
isEventHandler?: boolean,
extras?: Record<any, any>,
) {
this.logger.log(`Adding message handler for pattern '${ pattern }'`, 'ServerRMQ');
super.addHandler(pattern, callback, isEventHandler, extras);
}
protected override initializeDeserializer(options: ServerRmqOptions) {
this.deserializer = options?.deserializer ?? new RabbitMqIncomingRequestDeserializer();
}
protected override initializeSerializer(options: ServerRmqOptions) {
this.serializer = options?.serializer ?? new RmqRecordSerializer();
}
private parseMessageContent(content: Buffer) {
try {
return JSON.parse(content.toString());
} catch {
return content.toString();
}
}
}
</code></pre>
</div>
</div>
</div><div class="search-results">
<div class="has-results">
<h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
<ul class="search-results-list"></ul>
</div>
<div class="no-results">
<h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
</div>
</div>
</div>
<!-- END CONTENT -->
</div>
</div>
<label class="dark-mode-switch">
<input type="checkbox">
<span class="slider">
<svg class="slider-icon" viewBox="0 0 24 24" fill="none" height="20" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" width="20" xmlns="http://www.w3.org/2000/svg">
<path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"></path>
</svg>
</span>
</label>
<script>
var COMPODOC_CURRENT_PAGE_DEPTH = 1;
var COMPODOC_CURRENT_PAGE_CONTEXT = 'class';
var COMPODOC_CURRENT_PAGE_URL = 'ServerRMQ.html';
var MAX_SEARCH_RESULTS = 15;
</script>
<script>
$darkModeToggleSwitchers = document.querySelectorAll('.dark-mode-switch input');
checkToggle(darkModeState);
if ($darkModeToggleSwitchers.length > 0) {
for (var i = 0; i < $darkModeToggleSwitchers.length; i++) {
$darkModeToggleSwitchers[i].addEventListener('change', function (event) {
darkModeState = !darkModeState;
toggleDarkMode(darkModeState);
});
}
}
</script>
<script src="../js/libs/custom-elements.min.js"></script>
<script src="../js/libs/lit-html.js"></script>
<script src="../js/menu-wc.js" defer></script>
<script nomodule src="../js/menu-wc_es5.js" defer></script>
<script src="../js/libs/bootstrap-native.js"></script>
<script src="../js/libs/es6-shim.min.js"></script>
<script src="../js/libs/EventDispatcher.js"></script>
<script src="../js/libs/promise.min.js"></script>
<script src="../js/libs/zepto.min.js"></script>
<script src="../js/compodoc.js"></script>
<script src="../js/tabs.js"></script>
<script src="../js/menu.js"></script>
<script src="../js/libs/clipboard.min.js"></script>
<script src="../js/libs/prism.js"></script>
<script src="../js/sourceCode.js"></script>
<script src="../js/search/search.js"></script>
<script src="../js/search/lunr.min.js"></script>
<script src="../js/search/search-lunr.js"></script>
<script src="../js/search/search_index.js"></script>
<script src="../js/lazy-load-graphs.js"></script>
</body>
</html>