iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 27
0
Modern Web

NestJs 讀書筆記系列 第 27

NestJs 延伸篇 - Federation 設定

  • 分享至 

  • xImage
  •  

Federation 設定

我們先讓 Task 可以跟 gateway 接上
User 跟 Message 可以晚點跟上,因為做法都一樣

Task Service

先在 Task 加上 federation 的 dependency

$ npm install --save @apollo/federation

or

$ yarn add @apollo/federation

將 Task 的 app.module.ts 更改,改為 GraphQLFederationModule

import { Module } from '@nestjs/common';
// 引入 GraphQLModule
import { GraphQLFederationModule } from '@nestjs/graphql';
import { TasksModule } from './tasks/tasks.module';
import { MongooseModule } from '@nestjs/mongoose';
import { join } from 'path';

@Module({
  imports: [
    MongooseModule.forRoot('mongodb://root:test@localhost:27012/admin'),
    GraphQLFederationModule.forRoot({
      autoSchemaFile: join(__dirname, 'src/schema.gql'),
    }),
    TasksModule
  ],
})
export class AppModule {}

更改 Task 的 port,可以由讀者自行決定,我這邊更改為 4002 ,原本的 4000 會讓 gateway 使用

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

declare const module: any;

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(4002);

  if (module.hot) {
    module.hot.accept();
    module.hot.dispose(() => app.close());
  }
}
bootstrap();

Gateway

接著使用 nestjs 提供的指令,建立一個 gateway

$ nest new gateway

安裝需要的套件

$ yarn add @nestjs/graphql @apollo/gateway apollo-server-express

設定 gateway 的 service list

import { Module } from '@nestjs/common';
import { GraphQLGatewayModule } from '@nestjs/graphql';

@Module({
  imports: [
    GraphQLGatewayModule.forRootAsync({
      useFactory: async () => ({
        gateway: {
          serviceList: [
            { name: 'task', url: 'http://localhost:4002/graphql' }
          ],
        }
      })
    }),
  ]
})
export class AppModule {}

以上是基本的 gateway 設定,接下來會講解如何實際使用


上一篇
NestJs 延伸篇 - Federation 介紹
下一篇
NestJs 延伸篇 - Federation 實作
系列文
NestJs 讀書筆記31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言