<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## NATS [NATS](https://nats.io) 是一個簡單、高性能的云應用原生、物聯網和微服務架構應用的開源消息系統。`NATS`服務器使用`Go`語言編寫,但客戶端可以通過各種主流語言與服務器交互。`NATS`支持最多一次和最少一次的傳輸。可以在任何地方運行,從大型服務器和云實例到邊緣網關甚至物聯網設備都能運行。 ### 安裝 在開始之前,我們必須安裝所需的軟件包: ``` $ npm i --save nats@^1.4.12 ``` ### 概述 為了切換到 **NATS** 傳輸器,我們需要修改傳遞到 `createMicroservice()` 方法的選項對象。 > main.ts ```typescript const app = await NestFactory.createMicroservice<MicroserviceOptions>(AppModule, { transport: Transport.NATS, options: { url: 'nats://localhost:4222', }, }); ``` > `Transport` 需要從 `@nestjs/microservices` 包導入。 ### 選項 `options`對象和選擇的傳輸器有關,`NATS`傳輸器暴露了一些屬性,見[這里](https://github.com/nats-io/node-nats#connect-options),它還有一個額外的`queue`屬性,允許你指定要從服務器訂閱的隊列名稱。(如果要忽略該配置可以設置為`undefined`)。 ### 客戶端 像其他微服務傳輸器一樣,你可以在創建`ClientProxy`實例時傳輸[一些選項](https://docs.nestjs.com/microservices/basics#client)。 一種來創建實例的方法是使用`ClientsModule`。要使用`ClientsModule`創建一個客戶端實例,引入并使用`register()`方法并傳遞一個 `options` 對象,該對象具有與前面在 `createMicroservice()` 方法具有相同的屬性。`name`屬性被用于注入`token`,更多關于`ClientsModule`內容參見[這里](https://docs.nestjs.com/microservices/basics#client)。 ```typescript @Module({ imports: [ ClientsModule.register([ { name: 'MATH_SERVICE', transport: Transport.NATS, options: { url: 'nats://localhost:4222', } }, ]), ] ... }) ``` 也可以使用其他創建客戶端的實例( `ClientProxyFactory` 或 `@Client()` )。 ### 請求-響應 請求-響應消息風格下,NATS不是使用內置的[請求-應答(Request-Reply](https://docs.nats.io/nats-concepts/reqreply)機制。相反,一個“請求”通過給定主題使用```publish()```方法攜帶一個答復主題名稱發布,,監聽該主題的響應者將響應發送給答復主題(reply subject)。答復主題無論位于何處,它都將動態地直接返回給請求者。 ### 基于事件 基于事件的風格下,NATS使用內置的[發布-訂閱(Publish-Subscribe)](https://docs.nats.io/nats-concepts/pubsub)機制。發布者發布一個基于主題的消息,該消息的訂閱者都會收到此消息。訂閱者也可以通過通配符來實現類似正則表達式的訂閱。這種一對多的模式有時被稱為扇出(fan-out)。 ### 隊列分類 NATS提供了一個內置的平衡特性叫做[分布式隊列](https://docs.nats.io/nats-concepts/queue)。如下使用`queue`屬性創建一個隊列訂閱。 ```typescript const app = await NestFactory.createMicroservice(AppModule, { transport: Transport.NATS, options: { url: 'nats://localhost:4222', queue: 'cats_queue', }, }); ``` ### 上下文 在更復雜的場景中,您可能希望訪問關于傳入請求的更多信息。在`NATS` 中,您可以訪問 `NatsContext`對象。 ```typescript @MessagePattern('notifications') getNotifications(@Payload() data: number[], @Ctx() context: NatsContext) { console.log(`Subject: ${context.getSubject()}`); } ``` > `@Payload()`, `@Ctx()` 和 `NatsContext` 需要從 `@nestjs/microservices` 包導入. ### 通配符 訂閱可以是確定的或者包含通配符的。 ```typescript @MessagePattern('time.us.*') getDate(@Payload() data: number[], @Ctx() context: NatsContext) { console.log(`Subject: ${context.getSubject()}`); // e.g. "time.us.east" return new Date().toLocaleTimeString(...); } ``` ### 記錄建設者 要配置消息選項,您可以使用`NatsRecordBuilder`該類(注意:這對于基于事件的流也是可行的)。例如添加`x-version`header,使用`setHeaders`方法,如下: ~~~typescript import * as nats from 'nats'; // somewhere in your code const headers = nats.headers(); headers.set('x-version', '1.0.0'); const record = new NatsRecordBuilder(':cat:').setHeaders(headers).build(); this.client.send('replace-emoji', record).subscribe(...); ~~~ > **提示**`NatsRecordBuilder``@nestjs/microservices`類是從包中導出的。 您也可以通過訪問 來在服務器端讀取這些標頭`NatsContext`,如下所示: ~~~typescript @MessagePattern('replace-emoji') replaceEmoji(@Payload() data: string, @Ctx() context: NatsContext): string { const headers = context.getHeaders(); return headers['x-version'] === '1.0.0' ? '??' : '??'; } ~~~ 在某些情況下,您可能希望為多個請求配置標頭,您可以將這些作為選項傳遞給`ClientProxyFactory`: ~~~typescript import { Module } from '@nestjs/common'; import { ClientProxyFactory, Transport } from '@nestjs/microservices'; @Module({ providers: [ { provide: 'API_v1', useFactory: () => ClientProxyFactory.create({ transport: Transport.NATS, options: { servers: ['nats://localhost:4222'], headers: { 'x-version': '1.0.0' }, }, }), }, ], }) export class ApiModule {} ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看