问题描述
我正在测试分子微服务框架以建立基础设施。我将使用打字稿 (https://github.com/moleculerjs/moleculer-template-project-typescript)。我的想法是根据文档是:
- 使用 API Gateway 创建一个项目 => make doker => 使用 N 个副本进行 k8s 部署
- 为每个微服务创建 1 个项目 => dockerize => 使用 N 个副本进行 k8s 部署
- 为每个微服务创建 2 个项目 => dockerize => 使用 N 个副本进行 k8s 部署 ...
- 为每个微服务创建 N 个项目 => dockerize => 使用 N 个副本进行 k8s 部署
我将使用 redis 作为传输器。我也想在开发中使用 redis。
我有这个疑问,因为您可以在同一个项目中创建所有微服务,但是通过这种方式,您正在开发一个单体应用程序(并且仅在一个线程中)。我认为你需要在独立的(打字稿)项目中分离每个微服务,以便在部署阶段在 docker 镜像和 k8s 中的 make pods 之后进行。
解决方法
您可以将每个微服务分成单独的项目,但使用 Moleculer 您不需要它。您可以将所有服务整合到一个项目中。开发将简单快捷,并且在部署时您可以控制将加载哪些服务。这样你就可以生成一个docker镜像,并通过环境变量控制加载的服务。
例如在这里你可以看到 docker-compose.yml 中的 SERVICES
env var:
https://moleculer.services/docs/0.14/deploying.html#Docker-Compose
version: "3.2"
services:
api:
build:
context: .
image: moleculer-demo
container_name: moleculer-demo-api
env_file: docker-compose.env
environment:
SERVICES: api # Runner will start only the 'api' service in this container
PORT: 3000 # Port of API gateway
greeter:
build:
context: .
image: moleculer-demo
container_name: moleculer-demo-greeter
env_file: docker-compose.env
environment:
SERVICES: greeter # Runner will start only the 'greeter' service in this container