我正在使用 NestJs、Fastify、Mercurius 和联合服务创建一个 GraphQL 应用程序。
我创建了两个服务(用户、餐厅),但是在创建网关时,它只显示一个服务的架构,而不是两个。我试图颠倒顺序,似乎它只需要顶部的那个,这意味着当我把用户 URL 放在第一位时,它只需要用户模式,餐厅也是如此。下面是网关和两个服务的声明:
网关
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { GraphQLModule } from '@nestjs/graphql';
import {
MercuriusGatewayDriver,
MercuriusGatewayDriverConfig,
} from '@nestjs/mercurius';
@Module({
imports: [
GraphQLModule.forRoot<MercuriusGatewayDriverConfig>({
driver: MercuriusGatewayDriver,
gateway: {
services: [
{
name: 'users',
url: 'http://localhost:3001/graphql',
mandatory: true,
},
{
name: 'restaurants',
url: 'http://localhost:3002/graphql',
mandatory: true,
},
],
pollingInterval: 5000,
},
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
用户
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserModule } from '../user/user.module';
import { JwtModule } from '@nestjs/jwt';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { AddressModule } from '../address/address.module';
import { GraphQLModule } from '@nestjs/graphql';
import {
MercuriusFederationDriver,
MercuriusFederationDriverConfig,
} from '@nestjs/mercurius';
@Module({
imports: [
GraphQLModule.forRoot<MercuriusFederationDriverConfig>({
driver: MercuriusFederationDriver,
autoSchemaFile: true,
federationMetadata: true,
}),
UserModule,
AddressModule,
JwtModule.registerAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
secret: configService.get('SECRET_JWT_ACCESS_KEY'),
}),
inject: [ConfigService],
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
餐厅
import { ConfigModule, ConfigService } from '@nestjs/config';
import { JwtModule } from '@nestjs/jwt';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { RestaurantModule } from '../restaurant/restaurant.module';
import { RestauAddressModule } from '../restau-address/restau-address.module';
import { GraphQLModule } from '@nestjs/graphql';
import {
MercuriusFederationDriver,
MercuriusFederationDriverConfig,
} from '@nestjs/mercurius';
@Module({
imports: [
GraphQLModule.forRoot<MercuriusFederationDriverConfig>({
driver: MercuriusFederationDriver,
autoSchemaFile: true,
federationMetadata: true,
}),
JwtModule.registerAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
secret: configService.get('SECRET_JWT_ACCESS_KEY'),
}),
inject: [ConfigService],
}),
RestaurantModule,
RestauAddressModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
所有单独工作正常。