docker - NestJS:使用 Docker 的微服务
问题描述
我正在使用微服务,但遇到了问题。我有两个带有微服务的 NestJS 应用程序。第一个是hybrid appliacation
,第二个只是一个简单的具有app.listen()
功能的微服务。一切都在 Docker-compose 中设置。我只想发送一个简单的@EventPattern
,但它失败了。第二个应用程序没有收到任何事件。我正在关注这个主题:https ://github.com/nestjs/nest/issues/2532但它根本没有帮助。这是我写的一些代码:
docker-compose-dev.yml
# First Server
# --------------------------------------------------
first-server:
container_name: first-server
image: project/firstserver
build:
context: ../first-server/
args:
UUID: ${UUID}
UGID: ${GUID}
environment:
NODE_ENV: ${NODE_ENV:-development}
depends_on:
- db-postgres
- db-mongo
user: "${UUID}:${GUID}"
tty: true
expose:
- "3000"
- "3010"
ports:
- "3000:3000"
- "3010:3010"
volumes:
- ../first-server:/app
networks:
- servers-network
# Second Server
# --------------------------------------------------
second-server:
container_name: second-server
image: project/secondserver
build:
context: ../second-server/
args:
UUID: ${UUID}
UGID: ${GUID}
environment:
NODE_ENV: ${NODE_ENV:-development}
depends_on:
- db-postgres
- db-mongo
user: "${UUID}:${GUID}"
tty: true
expose:
- "3100"
- "3020"
ports:
- "3100:3100"
- "3020:3020"
volumes:
- ../second-server:/app
networks:
- servers-network
# Docker networks
# --------------------------------------------------
networks:
servers-network:
driver: bridge
name: servers-network
第一服务器:
main.ts
async function bootstrap() {
const app = await NestFactory.create<NestExpressApplication>(AppModule);
const microservice = app.connectMicroservice({
transport: Transport.TCP,
options: {
host: '0.0.0.0',
port: 3010
}
});
await app.startAllMicroservicesAsync();
await app.listen(port);
}
app.module.ts
@Module({
imports: [
TypeOrmModule.forRootAsync({
useClass: TypeOrmPostgresConfigProvider,
name: TypeOrmPostgresConfigProvider.connectionName,
imports: [
ConfigModule
]
}),
TypeOrmModule.forRootAsync({
useClass: TypeOrmMongoConfigProvider,
name: TypeOrmMongoConfigProvider.connectionName,
imports: [
ConfigModule
]
}),
ServeStaticModule.forRoot({
rootPath: join(__dirname, '../..', 'public/app')
}),
ClientsModule.register([
{
name: 'SERVICE_A',
transport: Transport.TCP,
options: {
host: '0.0.0.0',
port: 3010
}
}
])
],
controllers: [
AppController
],
providers: []
})
app.controller.ts
export class AppController {
constructor(
@Inject('SERVICE_A') private readonly client: ClientProxy
) {
}
async onApplicationBootstrap() {
await this.client.connect()
.then(result => {
console.log('result');
})
.catch(error => {
console.log(error);
});
}
@Get('hello')
getHello() {
this.client.emit<any>('message_printed', new Message('Hi there!'));
return 'Hello World printed';
}
@EventPattern('message_printed')
async handleMessagePrinted(data: Record<string, unknown>) {
console.log('first-server event!');
}
}
第二服务器:
main.ts
async function bootstrap() {
const app = await NestFactory.createMicroservice<MicroserviceOptions>(
AppModule,
{
transport: Transport.TCP,
options: {
host: '0.0.0.0',
port: 3020
}
}
);
app.listen(() => console.log('Microservice is listening'));
}
app.controller.ts
export class AppController {
constructor() {
}
@EventPattern('message_printed')
async handleMessagePrinted(data: Record<string, unknown>) {
console.log('second-server event!');
}
}
在两台服务器上,我都有最新版本的 NestJS。Docker 版本是 19.03.5。
解决方案
推荐阅读
- typescript - 泛型 - 使用参数函数的返回类型作为返回类型
- java - 如何在使用 lombok 调用 Java 类或 Java 接口时访问 getter 方法?
- arrays - 快速排序数组字典
- python - Django 3.0,消息框架遇到麻烦
- regex - 正则表达式跨行查找字符
- openstreetmap - 下载 OpenStreetMap 试用数据的链接错误
- php - Laravel 如何通过只执行一个查询来获得多个不同的结果
- react-native - 获取所有异步存储数据键并将它们设置为状态
- python - Google GCP Cloud Functions 到 BigQuery 错误
- php - php info 不同于 server 和 info.php