[英]Running Multiple Microservices with multiple docker compose with NATS
我是微服務的新手,我有一個設置多個微服務的項目,該項目是這樣設置的。 每個 Nest js 應用程序都有
現在我正在做的是擁有
Nest JS 微服務 APP 1
- API exposed to port 5000
- Postgres database working on 5432
- NATS running on 4222
NEST JS 應用微服務 2
- 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 消息代理。 我的 NEST JS APP 1 的 docker-compose 文件如下。
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
第二個NEST JS微服務docker-compose如下
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 在兩個應用程序之間進行通信。 因此,如果我從微服務 1 發布消息並將該消息訂閱到微服務 2,依此類推。
是的,如果您通過主機網絡堆棧鏈接它,請確保主機端口被占用。 您只能將一項服務鏈接到ip:port
看起來您試圖啟動兩個 NATS 實例並讓它們加入同一個 NATS 集群。 但也許您需要兩個實例進行開發。 您只想查看通過它的消息。
選項 1:只需將所有內容放在一個 compose 中,並為兩個服務使用 depends_on 和相同的 NATS 節點
選項 2:使用單獨的組合堆棧來配置您的 NATS 基礎架構並使用extrnal_links 。
選項 3:為 NATS 集群定義自定義網絡,其中每個 NATS 容器都有自己的 iP。
但我會從 1 開始。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.