UNPKG

@rxap/nest-amqp

Version:
2,236 lines 86 kB
<!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" >ClientRMQExchange</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/client-rmq-exchange.ts</code>
        </p>



            <p class="comment">
                <h3>Extends</h3>
            </p>
            <p class="comment">
                        <code>ClientProxy</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="#client" >client</a>
                            </li>
                            <li>
                                    <span class="modifier">Protected</span>
                                <a href="#connection$" >connection$</a>
                            </li>
                            <li>
                                    <span class="modifier">Protected</span>
                                <a href="#responseEmitter" >responseEmitter</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>
                                <a href="#close" >close</a>
                            </li>
                            <li>
                                    <span class="modifier">Public</span>
                                <a href="#connect" >connect</a>
                            </li>
                            <li>
                                    <span class="modifier">Public</span>
                                    <span class="modifier">Async</span>
                                <a href="#consumeChannel" >consumeChannel</a>
                            </li>
                            <li>
                                    <span class="modifier">Public</span>
                                    <span class="modifier">Async</span>
                                <a href="#convertConnectionToPromise" >convertConnectionToPromise</a>
                            </li>
                            <li>
                                    <span class="modifier">Public</span>
                                <a href="#createChannel" >createChannel</a>
                            </li>
                            <li>
                                    <span class="modifier">Public</span>
                                <a href="#createClient" >createClient</a>
                            </li>
                            <li>
                                    <span class="modifier">Protected</span>
                                <a href="#dispatchEvent" >dispatchEvent</a>
                            </li>
                            <li>
                                    <span class="modifier">Public</span>
                                <a href="#handleDisconnectError" >handleDisconnectError</a>
                            </li>
                            <li>
                                    <span class="modifier">Public</span>
                                <a href="#handleError" >handleError</a>
                            </li>
                            <li>
                                    <span class="modifier">Public</span>
                                    <span class="modifier">Async</span>
                                <a href="#handleMessage" >handleMessage</a>
                            </li>
                            <li>
                                    <span class="modifier">Public</span>
                                    <span class="modifier">Async</span>
                                <a href="#handleMessage" >handleMessage</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>
                                <a href="#isConnected" >isConnected</a>
                            </li>
                            <li>
                                    <span class="modifier">Public</span>
                                <a href="#mergeDisconnectEvent" >mergeDisconnectEvent</a>
                            </li>
                            <li>
                                    <span class="modifier">Protected</span>
                                <a href="#mergeHeaders" >mergeHeaders</a>
                            </li>
                            <li>
                                    <span class="modifier">Protected</span>
                                <a href="#parseMessageContent" >parseMessageContent</a>
                            </li>
                            <li>
                                    <span class="modifier">Protected</span>
                                <a href="#publish" >publish</a>
                            </li>
                            <li>
                                    <span class="modifier">Public</span>
                                    <span class="modifier">Async</span>
                                <a href="#setupExchange" >setupExchange</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/ExchangeRmqOptions.html" target="_self">ExchangeRmqOptions</a>, logger)</code>
                    </td>
                </tr>
                        <tr>
                            <td class="col-md-4">
                                <div class="io-line">Defined in <a href="" data-line="60" class="link-to-prism">src/lib/client-rmq-exchange.ts:60</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/ExchangeRmqOptions.html" target="_self" >ExchangeRmqOptions</a></code>
                                                        </td>
                                                  
                                                    <td>
                                                            No
                                                    </td>
                                                    
                                                </tr>
                                                <tr>
                                                        <td>logger</td>
                                                  
                                                        <td>
                                                        </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="59" class="link-to-prism">src/lib/client-rmq-exchange.ts:59</a></div>
                        </td>
                    </tr>


        </tbody>
    </table>
    <table class="table table-sm table-bordered">
        <tbody>
            <tr>
                <td class="col-md-4">
                    <a name="client"></a>
                    <span class="name">
                            <span class="modifier">Protected</span>
                        <span ><b>client</b></span>
                        <a href="#client"><span class="icon ion-ios-link"></span></a>
                    </span>
                </td>
            </tr>
                <tr>
                    <td class="col-md-4">
                        <i>Type : </i>    <code>AmqpConnectionManager | 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="58" class="link-to-prism">src/lib/client-rmq-exchange.ts:58</a></div>
                        </td>
                    </tr>


        </tbody>
    </table>
    <table class="table table-sm table-bordered">
        <tbody>
            <tr>
                <td class="col-md-4">
                    <a name="connection$"></a>
                    <span class="name">
                            <span class="modifier">Protected</span>
                        <span ><b>connection$</b></span>
                        <a href="#connection$"><span class="icon ion-ios-link"></span></a>
                    </span>
                </td>
            </tr>
                <tr>
                    <td class="col-md-4">
                        <i>Type : </i>    <code>ReplaySubject&lt;Connection&gt;</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/client-rmq-exchange.ts:57</a></div>
                        </td>
                    </tr>


        </tbody>
    </table>
    <table class="table table-sm table-bordered">
        <tbody>
            <tr>
                <td class="col-md-4">
                    <a name="responseEmitter"></a>
                    <span class="name">
                            <span class="modifier">Protected</span>
                        <span ><b>responseEmitter</b></span>
                        <a href="#responseEmitter"><span class="icon ion-ios-link"></span></a>
                    </span>
                </td>
            </tr>
                <tr>
                    <td class="col-md-4">
                        <i>Type : </i>    <code>EventEmitter</code>

                    </td>
                </tr>
                    <tr>
                        <td class="col-md-4">
                                <div class="io-line">Defined in <a href="" data-line="60" class="link-to-prism">src/lib/client-rmq-exchange.ts:60</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="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="76"
                                    class="link-to-prism">src/lib/client-rmq-exchange.ts:76</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="connect"></a>
                    <span class="name">
                            <span class="modifier">Public</span>
                        <span ><b>connect</b></span>
                        <a href="#connect"><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>connect()</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/client-rmq-exchange.ts:83</a></div>
                        </td>
                    </tr>


            <tr>
                <td class="col-md-4">

                        <div class="io-description">
                            <b>Returns : </b>    <code>Promise&lt;Connection&gt;</code>

                        </div>
                </td>
            </tr>
        </tbody>
    </table>
    <table class="table table-sm table-bordered">
        <tbody>
            <tr>
                <td class="col-md-4">
                    <a name="consumeChannel"></a>
                    <span class="name">
                            <span class="modifier">Public</span>
                            <span class="modifier">Async</span>
                        <span ><b>consumeChannel</b></span>
                        <a href="#consumeChannel"><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>consumeChannel(channel: Channel)</code>
                </td>
            </tr>


                    <tr>
                        <td class="col-md-4">
                            <div class="io-line">Defined in <a href="" data-line="183"
                                    class="link-to-prism">src/lib/client-rmq-exchange.ts:183</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>Channel</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="convertConnectionToPromise"></a>
                    <span class="name">
                            <span class="modifier">Public</span>
                            <span class="modifier">Async</span>
                        <span ><b>convertConnectionToPromise</b></span>
                        <a href="#convertConnectionToPromise"><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>convertConnectionToPromise()</code>
                </td>
            </tr>


                    <tr>
                        <td class="col-md-4">
                            <div class="io-line">Defined in <a href="" data-line="161"
                                    class="link-to-prism">src/lib/client-rmq-exchange.ts:161</a></div>
                        </td>
                    </tr>


            <tr>
                <td class="col-md-4">

                        <div class="io-description">
                            <b>Returns : </b>    <code>unknown</code>

                        </div>
                </td>
            </tr>
        </tbody>
    </table>
    <table class="table table-sm table-bordered">
        <tbody>
            <tr>
                <td class="col-md-4">
                    <a name="createChannel"></a>
                    <span class="name">
                            <span class="modifier">Public</span>
                        <span ><b>createChannel</b></span>
                        <a href="#createChannel"><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>createChannel()</code>
                </td>
            </tr>


                    <tr>
                        <td class="col-md-4">
                            <div class="io-line">Defined in <a href="" data-line="117"
                                    class="link-to-prism">src/lib/client-rmq-exchange.ts:117</a></div>
                        </td>
                    </tr>


            <tr>
                <td class="col-md-4">

                        <div class="io-description">
                            <b>Returns : </b>    <code>Promise&lt;void&gt;</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="126"
                                    class="link-to-prism">src/lib/client-rmq-exchange.ts:126</a></div>
                        </td>
                    </tr>


            <tr>
                <td class="col-md-4">

                        <div class="io-description">
                            <b>Returns : </b>    <code>AmqpConnectionManager</code>

                        </div>
                </td>
            </tr>
        </tbody>
    </table>
    <table class="table table-sm table-bordered">
        <tbody>
            <tr>
                <td class="col-md-4">
                    <a name="dispatchEvent"></a>
                    <span class="name">
                            <span class="modifier">Protected</span>
                        <span ><b>dispatchEvent</b></span>
                        <a href="#dispatchEvent"><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>dispatchEvent(packet: ReadPacket)</code>
                </td>
            </tr>


                    <tr>
                        <td class="col-md-4">
                            <div class="io-line">Defined in <a href="" data-line="313"
                                    class="link-to-prism">src/lib/client-rmq-exchange.ts:313</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>packet</td>
                                            <td>
                                                        <code>ReadPacket</code>
                                            </td>

                                            <td>
                                                    No
                                            </td>


                                        </tr>
                                    </tbody>
                                </table>
                            </div>
                        <div class="io-description">
                            <b>Returns : </b>    <code>Promise&lt;any&gt;</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="handleDisconnectError"></a>
                    <span class="name">
                            <span class="modifier">Public</span>
                        <span ><b>handleDisconnectError</b></span>
                        <a href="#handleDisconnectError"><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>handleDisconnectError(client: AmqpConnectionManager)</code>
                </td>
            </tr>


                    <tr>
                        <td class="col-md-4">
                            <div class="io-line">Defined in <a href="" data-line="204"
                                    class="link-to-prism">src/lib/client-rmq-exchange.ts:204</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>client</td>
                                            <td>
                                                        <code>AmqpConnectionManager</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="handleError"></a>
                    <span class="name">
                            <span class="modifier">Public</span>
                        <span ><b>handleError</b></span>
                        <a href="#handleError"><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>handleError(client: AmqpConnectionManager)</code>
                </td>
            </tr>


                    <tr>
                        <td class="col-md-4">
                            <div class="io-line">Defined in <a href="" data-line="200"
                                    class="link-to-prism">src/lib/client-rmq-exchange.ts:200</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>client</td>
                                            <td>
                                                        <code>AmqpConnectionManager</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="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(packet, callback: (packet: WritePacket) => void)</code>
                </td>
            </tr>


                    <tr>
                        <td class="col-md-4">
                            <div class="io-line">Defined in <a href="" data-line="211"
                                    class="link-to-prism">src/lib/client-rmq-exchange.ts:211</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>packet</td>
                                            <td>
                                            </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>
                                                    No
                                            </td>


                                        </tr>
                                    </tbody>
                                </table>
                            </div>
                        <div class="io-description">
                            <b>Returns : </b>    <code>Promise&lt;void&gt;</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(packet, options: Record<string | >, callback: (packet: WritePacket) => void)</code>
                </td>
            </tr>


                    <tr>
                        <td class="col-md-4">
                            <div class="io-line">Defined in <a href="" data-line="215"
                                    class="link-to-prism">src/lib/client-rmq-exchange.ts:215</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>packet</td>
                                            <td>
                                            </td>

                                            <td>
                                                    No
                                            </td>


                                        </tr>
                                        <tr>
                                                <td>options</td>
                                            <td>
                                                        <code>Record&lt;string | &gt;</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>
                                                    No
                                            </td>


                                        </tr>
                                    </tbody>
                                </table>
                            </div>
                        <div class="io-description">
                            <b>Returns : </b>    <code>Promise&lt;void&gt;</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(packet, optionsOrCallback: Record<string | > | , callback?: (packet?: WritePacket) => void)</code>
                </td>
            </tr>


                    <tr>
                        <td class="col-md-4">
                            <div class="io-line">Defined in <a href="" data-line="220"
                                    class="link-to-prism">src/lib/client-rmq-exchange.ts:220</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>packet</td>
                                            <td>
                                            </td>

                                            <td>
                                                    No
                                            </td>


                                        </tr>
                                        <tr>
                                                <td>optionsOrCallback</td>
                                            <td>
                                                        <code>Record&lt;string | &gt; | </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>Promise&lt;void&gt;</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/ExchangeRmqOptions.html" target="_self">ExchangeRmqOptions</a>)</code>
                </td>
            </tr>


                    <tr>
                        <td class="col-md-4">
                            <div class="io-line">Defined in <a href="" data-line="342"
                                    class="link-to-prism">src/lib/client-rmq-exchange.ts:342</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/ExchangeRmqOptions.html" target="_self" >ExchangeRmqOptions</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/ExchangeRmqOptions.html" target="_self">ExchangeRmqOptions</a>)</code>
                </td>
            </tr>


                    <tr>
                        <td class="col-md-4">
                            <div class="io-line">Defined in <a href="" data-line="338"
                                    class="link-to-prism">src/lib/client-rmq-exchange.ts:338</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/ExchangeRmqOptions.html" target="_self" >ExchangeRmqOptions</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="isConnected"></a>
                    <span class="name">
                            <span class="modifier">Public</span>
                        <span ><b>isConnected</b></span>
                        <a href="#isConnected"><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>isConnected()</code>
                </td>
            </tr>


                    <tr>
                        <td class="col-md-4">
                            <div class="io-line">Defined in <a href="" data-line="72"
                                    class="link-to-prism">src/lib/client-rmq-exchange.ts:72</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="mergeDisconnectEvent"></a>
                    <span class="name">
                            <span class="modifier">Public</span>
                        <span ><b>mergeDisconnectEvent</b></span>
                        <a href="#mergeDisconnectEvent"><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>mergeDisconnectEvent(instance: <a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank">any</a>, source$: Observable<T>)</code>
                </td>
            </tr>


                    <tr>
                        <td class="col-md-4">
                            <div class="io-line">Defined in <a href="" data-line="131"
                                    class="link-to-prism">src/lib/client-rmq-exchange.ts:131</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>instance</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>source$</td>
                                            <td>
                                                        <code>Observable&lt;T&gt;</code>
                                            </td>

                                            <td>
                                                    No
                                            </td>


                                        </tr>
                                    </tbody>
                                </table>
                            </div>
                        <div class="io-description">
                            <b>Returns : </b>    <code>Observable&lt;T&gt;</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="mergeHeaders"></a>
                    <span class="name">
                            <span class="modifier">Protected</span>
                        <span ><b>mergeHeaders</b></span>
                        <a href="#mergeHeaders"><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>mergeHeaders(requestHeaders?: Record<string | string>)</code>
                </td>
            </tr>


                    <tr>
                        <td class="col-md-4">
                            <div class="io-line">Defined in <a href="" data-line="346"
                                    class="link-to-prism">src/lib/client-rmq-exchange.ts:346</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>requestHeaders</td>
                                            <td>
                                                        <code>Record&lt;string | string&gt;</code>
                                            </td>

                                            <td>
                                                    Yes
                                            </td>


                                        </tr>
                                    </tbody>
                                </table>
                            </div>
                        <div class="io-description">
                            <b>Returns : </b>    <code>Record | undefined</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="parseMessageContent"></a>
                    <span class="name">
                            <span class="modifier">Protected</span>
                        <span ><b>parseMessageContent</b></span>
                        <a href="#parseMessageContent"><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>parseMessageContent(content: Buffer)</code>
                </td>
            </tr>


                    <tr>
                        <td class="col-md-4">
                            <div class="io-line">Defined in <a href="" data-line="359"
                                    class="link-to-prism">src/lib/client-rmq-exchange.ts:359</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>content</td>
                                            <td>
                                                        <code>Buffer</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="publish"></a>
                    <span class="name">
                            <span class="modifier">Protected</span>
                        <span ><b>publish</b></span>
                        <a href="#publish"><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>publish(message: ReadPacket, callback: (packet: WritePacket) => void)</code>
                </td>
            </tr>


                    <tr>
                        <td class="col-md-4">
                            <div class="io-line">Defined in <a href="" data-line="264"
                                    class="link-to-prism">src/lib/client-rmq-exchange.ts:264</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>ReadPacket</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>
                                                    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="setupExchange"></a>
                    <span class="name">
                            <span class="modifier">Public</span>
                            <span class="modifier">Async</span>
                        <span ><b>setupExchange</b></span>
                        <a href="#setupExchange"><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>setupExchange(channel: Channel, resolve: () => 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/client-rmq-exchange.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>Channel</code>
                                            </td>

                                            <td>
                                                    No
                                            </td>


                                        </tr>
                                        <tr>
                                                <td>resolve</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><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 } from &#x27;@nestjs/common/services/logger.service&#x27;;
import { randomStringGenerator } from &#x27;@nestjs/common/utils/random-string-generator.util&#x27;;
import { isFunction } from &#x27;@nestjs/common/utils/shared.utils&#x27;;
import {
  ClientProxy,
  ReadPacket,
  RmqRecord,
  WritePacket,
} from &#x27;@nestjs/microservices&#x27;;
import {
  CONNECT_EVENT,
  CONNECT_FAILED_EVENT,
  DISCONNECT_EVENT,
  DISCONNECTED_RMQ_MESSAGE,
  ERROR_EVENT,
  RQM_DEFAULT_NOACK,
} from &#x27;@nestjs/microservices/constants&#x27;;
import { RmqRecordSerializer } from &#x27;@nestjs/microservices/serializers&#x27;;
import { ExchangeRmqOptions } from &#x27;./options&#x27;;

import {
  AmqpConnectionManager,
  ChannelWrapper,
  connect,
} from &#x27;amqp-connection-manager&#x27;;
import {
  Channel,
  Connection,
  ConsumeMessage,
  Options,
} from &#x27;amqplib&#x27;;
import { EventEmitter } from &#x27;events&#x27;;
import {
  firstValueFrom,
  fromEvent,
  merge,
  Observable,
  ReplaySubject,
  tap,
} from &#x27;rxjs&#x27;;
import {
  first,
  map,
  retryWhen,
  scan,
  skip,
} from &#x27;rxjs/operators&#x27;;
import { IncomingResponseDeserializer } from &#x27;./incoming-response.deserializer&#x27;;

export const REPLY_QUEUE &#x3D; &#x27;amq.rabbitmq.reply-to&#x27;;

export interface RmqExchangeOptions {
  options?: ExchangeRmqOptions;
}

export class ClientRMQExchange extends ClientProxy {
  protected connection$!: ReplaySubject&lt;Connection&gt;;
  protected client: AmqpConnectionManager | null &#x3D; null;
  protected channel: ChannelWrapper | null &#x3D; null;
  protected responseEmitter!: EventEmitter;

  constructor(
    protected readonly options: ExchangeRmqOptions,
    protected readonly logger &#x3D; new Logger(ClientProxy.name),
  ) {
    super();

    this.initializeSerializer(options);
    this.initializeDeserializer(options);
  }

  public isConnected() {
    return this.client &amp;&amp; this.client.isConnected();
  }

  public close(): void {
    this.channel &amp;&amp; this.channel.close();
    this.client &amp;&amp; this.client.close();
    this.channel &#x3D; null;
    this.client &#x3D; null;
  }

  public connect(): Promise&lt;Connection&gt; {
    if (this.client) {
      return this.convertConnectionToPromise();
    }
    this.client &#x3D; this.createClient();
    this.handleError(this.client);
    this.handleDisconnectError(this.client);

    this.responseEmitter &#x3D; new EventEmitter();
    this.responseEmitter.setMaxListeners(0);

    const connect$ &#x3D; this.connect$(this.client);
    const withDisconnect$ &#x3D; this.mergeDisconnectEvent(
      this.client,
      connect$,
    ).pipe(
      tap(() &#x3D;&gt; this.createChannel()),
    );

    const withReconnect$ &#x3D; fromEvent(this.client, CONNECT_EVENT).pipe(
      skip(1),
    );
    const source$: Observable&lt;{ url: string, connection: Connection }&gt; &#x3D; merge(withDisconnect$, withReconnect$);

    this.connection$ &#x3D; new ReplaySubject(1);
    source$.subscribe({
      next: data &#x3D;&gt; {
        this.connection$.next(data.connection);
      },
    });

    return this.convertConnectionToPromise();
  }

  public createChannel(): Promise&lt;void&gt; {
    return new Promise(resolve &#x3D;&gt; {
      this.channel &#x3D; this.client!.createChannel({
        json: false,
        setup: (channel: Channel) &#x3D;&gt; this.setupExchange(channel, resolve),
      });
    });
  }

  public createClient(): AmqpConnectionManager {
    const socketOptions &#x3D; this.getOptionsProp(this.options, &#x27;socketOptions&#x27;);
    return connect(this.options.urls, socketOptions);
  }

  public mergeDisconnectEvent&lt;T &#x3D; any&gt;(
    instance: any,
    source$: Observable&lt;T&gt;,
  ): Observable&lt;T&gt; {
    const eventToError &#x3D; (eventType: string) &#x3D;&gt;
      fromEvent(instance, eventType).pipe(
        map((err: unknown) &#x3D;&gt; {
          throw err;
        }),
      );
    const disconnect$ &#x3D; eventToError(DISCONNECT_EVENT);

    const urls &#x3D; this.getOptionsProp(this.options, &#x27;urls&#x27;, []) ?? [];
    const connectFailed$ &#x3D; eventToError(CONNECT_FAILED_EVENT).pipe(
      retryWhen(e &#x3D;&gt;
        e.pipe(
          scan((errorCount, error: any) &#x3D;&gt; {
            if (urls.indexOf(error.url) &gt;&#x3D; urls.length - 1) {
              throw error;
            }
            return errorCount + 1;
          }, 0),
        ),
      ),
    );
    // If we ever decide to propagate all disconnect errors &amp; re-emit them through
    // the &quot;connection&quot; stream then comment out &quot;first()&quot; operator.
    return merge(source$, disconnect$, connectFailed$).pipe(first());
  }

  public async convertConnectionToPromise() {
    // try {
    return await firstValueFrom(this.connection$);
    // } catch (err) {
    //   if (err instanceof EmptyError) {
    //     return;
    //   }
    //   throw err;
    // }
  }

  public async setupExchange(channel: Channel, resolve: () &#x3D;&gt; unknown) {
    this.logger.verbose(&#x60;Setting up exchange &#x27;${ this.options.exchange.name }&#x27;&#x60;, &#x27;ClientRMQExchange&#x27;);
    if (!this.options.noAssert) {
      await channel.assertExchange(
        this.options.exchange.name, this.options.exchange.type, this.options.exchange.options);
    }

    await this.consumeChannel(channel);
    resolve();
  }

  public async consumeChannel(channel: Channel) {
    const noAck &#x3D; this.getOptionsProp(this.options, &#x27;noAck&#x27;, RQM_DEFAULT_NOACK);
    await channel.consume(
      this.options.replyQueue ?? REPLY_QUEUE,
      (msg: ConsumeMessage | null) &#x3D;&gt; {
        if (msg) {
          this.responseEmitter.emit(msg.properties.correlationId, msg);
        } else {
          this.logger.warn(&#x60;Message is empty from RMQ queue ${ this.options.replyQueue ?? REPLY_QUEUE }&#x60;);
        }
      },
      {
        noAck,
      },
    );
  }

  public handleError(client: AmqpConnectionManager): void {
    client.addListener(ERROR_EVENT, (err: any) &#x3D;&gt; this.logger.error(err));
  }

  public handleDisconnectError(client: AmqpConnectionManager): void {
    client.addListener(DISCONNECT_EVENT, (err: any) &#x3D;&gt; {
      this.logger.error(DISCONNECTED_RMQ_MESSAGE);
      this.logger.error(err);
    });
  }

  public async handleMessage(
    packet: unknown,
    callback: (packet: WritePacket) &#x3D;&gt; any,
  ): Promise&lt;void&gt;;
  public async handleMessage(
    packet: unknown,
    options: Record&lt;string, unknown&gt;,
    callback: (packet: WritePacket) &#x3D;&gt; any,
  ): Promise&lt;void&gt;;
  public async handleMessage(
    packet: unknown,
    optionsOrCallback: Record&lt;string, unknown&gt; | ((packet: WritePacket) &#x3D;&gt; any),
    callback?: (packet: WritePacket) &#x3D;&gt; any,
  ): Promise&lt;void&gt; {
    this.logger.verbose(&#x27;Received message: %JSON&#x27;, packet, &#x27;ClientRMQExchange&#x27;);
    let options: Record&lt;string, unknown&gt; | undefined &#x3D; undefined;
    if (isFunction(options)) {
      callback &#x3D; options as (packet: WritePacket) &#x3D;&gt; any;
    } else {
      options &#x3D; optionsOrCallback as Record&lt;string, unknown&gt;;
    }

    if (!callback) {
      throw new Error(&#x27;No callback provided&#x27;);
    }

    const {
      err,
      response,
      isDisposed,
    } &#x3D; await this.deserializer.deserialize(
      packet,
      options,
    );

    this.logger.verbose(&#x27;Deserialized response: %JSON&#x27;, response, &#x27;ClientRMQExchange&#x27;);
    if (err) {
      this.logger.verbose(&#x27;Deserialized error: %JSON&#x27;, err, &#x27;ClientRMQExchange&#x27;);
    }
    this.logger.verbose(&#x27;Deserialized isDisposed: %JSON&#x27;, isDisposed, &#x27;ClientRMQExchange&#x27;);
    if (isDisposed || err) {
      callback({
        err,
        response,
        isDisposed: true,
      });
    }
    callback({
      err,
      response,
    });
  }

  protected publish(
    message: ReadPacket,
    callback: (packet: WritePacket) &#x3D;&gt; any,
  ): () &#x3D;&gt; void {
    this.logger.verbose(&#x27;Publishing message: %JSON&#x27;, message, &#x27;ClientRMQExchange&#x27;);
    try {
      const correlationId &#x3D; randomStringGenerator();
      const listener &#x3D; ({
        content,
        fields,
        properties,
      }: ConsumeMessage) &#x3D;&gt; this.handleMessage(
        this.parseMessageContent(content),
        {
          fields,
          properties,
        },
        callback,
      );

      Object.assign(message, { id: correlationId });
      const serializedPacket: ReadPacket &amp; Partial&lt;RmqRecord&gt; &#x3D;
        this.serializer.serialize(message);

      const options &#x3D; serializedPacket.options;
      delete serializedPacket.options;

      this.responseEmitter.on(correlationId, listener);
      this.channel!
        .publish(
          this.options.exchange.name,
          serializedPacket.pattern,
          Buffer.from(JSON.stringify(serializedPacket.data)),
          {
            replyTo: this.options.replyQueue ?? REPLY_QUEUE,
            persistent: this.options.persistent,
            ...options,
            headers: this.mergeHeaders(options?.headers),
            correlationId,
          } as Options.Publish,
        )
        .catch(err &#x3D;&gt; callback({ err }));
      return () &#x3D;&gt; this.responseEmitter.removeListener(correlationId, listener);
    } catch (err) {
      callback({ err });
    }
    return () &#x3D;&gt; void 0;
  }

  protected dispatchEvent(packet: ReadPacket): Promise&lt;any&gt; {
    this.logger.verbose(&#x27;Dispatching event: %JSON&#x27;, packet, &#x27;ClientRMQExchange&#x27;);
    const serializedPacket: ReadPacket &amp; Partial&lt;RmqRecord&gt; &#x3D;
      this.serializer.serialize(packet);

    const options &#x3D; serializedPacket.options;
    delete serializedPacket.options;

    return new Promise&lt;void&gt;((resolve, reject) &#x3D;&gt;
      this.channel!.publish(
        this.options.exchange.name,
        serializedPacket.pattern,
        Buffer.from(JSON.stringify(serializedPacket.data)),
        {
          persistent: this.options.persistent,
          ...options,
          headers: this.mergeHeaders(options?.headers),
        } as Options.Publish,
        (err: unknown) &#x3D;&gt; (
          err ? reject(err) : resolve()
        ),
      ),
    );
  }

  protected override initializeSerializer(options: ExchangeRmqOptions) {
    this.serializer &#x3D; options.serializer ?? new RmqRecordSerializer();
  }

  protected override initializeDeserializer(options: ExchangeRmqOptions) {
    this.deserializer &#x3D; options.deserializer ?? new IncomingResponseDeserializer();
  }

  protected mergeHeaders(
    requestHeaders?: Record&lt;string, string&gt;,
  ): Record&lt;string, string&gt; | undefined {
    if (!requestHeaders &amp;&amp; !this.options?.headers) {
      return undefined;
    }

    return {
      ...this.options?.headers,
      ...requestHeaders,
    };
  }

  protected parseMessageContent(content: Buffer) {
    const rawContent &#x3D; content.toString();
    try {
      return JSON.parse(rawContent);
    } catch {
      return rawContent;
    }
  }
}
</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 = 'ClientRMQExchange.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>