首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用NATS组合多个码头运行多个微服务

用NATS组合多个码头运行多个微服务
EN

Stack Overflow用户
提问于 2021-04-18 08:14:50
回答 1查看 895关注 0票数 1

我是微服务的新手,我有一个项目来安装多个微服务器,这个项目就是这样设置的。每个嵌套js应用程序都有

  • 向端口公开的API应用程序
  • 数据库
  • docker-编写文件,负责为每个微服务创建容器。

现在我要做的是

巢JS微卫星应用程序1

代码语言:javascript
复制
- API exposed to port 5000
- Postgres database working on 5432
- NATS running on 4222

套式JS应用微观器2

代码语言:javascript
复制
- API exposed to port 5001
- Postgres database working on 5433
- NATS not running on 4222 as it is already occupied. If I change the port how I am gonna use the same message broker on both services.

问题是,我想在第二个微服务和所有新创建的微服务上使用相同的NATS消息代理。我的嵌套JS应用程序1的停靠-撰写文件如下所示。

代码语言:javascript
复制
    version: '3.9'
    services:
      api:
        container_name: nest_app_1
        image: nest_app_1
        build:
          dockerfile: Dockerfile
          context: .
        ports:
          - 127.0.0.1:5000:5000
        env_file:
          - .env
        depends_on:
          - db
          - nats
        networks:
          - main
    
      db:
        container_name: postgres
        image: postgres:latest
        ports:
          - 127.0.0.1:5432:5432           
        volumes:
          - ./data:/var/lib/postgresql/data
        env_file:
          - .env
        networks:
          - main

  pgadmin:
    container_name: pgadmin
    image: dpage/pgadmin4
    ports:
      - 127.0.0.1:8080:80
    env_file:
      - .env
    networks:
      - main
  
  nats:
    image: nats-streaming:latest
    entrypoint:
      - /nats-streaming-server
      - -cid
      - main_cluster
    ports:
      - "127.0.0.1:4222:4222"
      - "127.0.0.1:6222:6222"
      - "127.0.0.1:8222:8222"
    restart: always
    tty: true
    networks:
      - main

networks:
  main:
    driver: bridge

第二套JS微型服务码头组合如下

代码语言:javascript
复制
version: '3.9'
services:
  api:
    container_name: nest_app_2
    image: nest_app_2
    build:
      dockerfile: Dockerfile
      context: .
    ports:
      - 127.0.0.1:5001:5001
    env_file:
      - .env
    depends_on:
      - app_db_2
    networks:
      - main

  app_db_2:
    container_name: postgres_2
    image: postgres:latest
    ports:
      - 127.0.0.1:5433:5432            
    volumes:
      - ./data:/var/lib/postgresql/data
    env_file:
      - .env
    networks:
      - main

  pgadmin:
    container_name: pgadmin_2
    image: dpage/pgadmin4
    ports:
      - 127.0.0.1:8081:80
    env_file:
      - .env
    networks:
      - main
  nats:
image: nats-streaming:latest
entrypoint:
  - /nats-streaming-server
  - -cid
  - main_cluster
ports:
  - "127.0.0.1:4222:4222"
restart: always
tty: true
networks:
  - main
networks:
  main:
    driver: bridge

现在我想使用NATS在两个应用程序之间进行通信。因此,如果我发布来自microservice 1的消息,并订阅到microservice 2,以此类推。

EN

回答 1

Stack Overflow用户

发布于 2021-04-18 09:58:18

是的,如果通过主机网络堆栈链接主机端口,则确定主机端口已被占用。您只能有一个链接到ip:port的服务

看起来,您试图启动两个NATS实例,并让它们加入同一个NATS集群。但也许您需要两个实例来进行开发。你只想看到消息通过它。

选项1:只需将所有内容组合在一起,并对两个服务使用depends_on和同一个NATS节点即可。

选项2:使用单独的组合堆栈来提供NATS基础设施并使用链接

选项3:为NATS集群定义自定义网络,其中每个NATS容器都获得自己的iP。

但我会从1开始。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67146444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档