假设我有两个Node.js服务在docker compose中运行。服务A侦听端口4000,服务B侦听端口5000。如何(通过使用Express)将json消息从服务a发送到服务B(反之亦然)?
通过一个简单的docker-compose文件,这两个服务可以使用它们的服务名相互访问。这是由services
下面的顶级键定义的。在这个简单的示例中,服务One
可以通过简单地将服务Two
命名为http://two:5000
来与服务Two
进行对话。另一个方向使用http://one:4000
进行相同的工作,假设进程在内部侦听这些端口号。两个容器还可以在内部监听相同的端口,因为它们具有不同的网络接口。请确保不要混淆到您的本地主机(4444和5555)的端口映射。
version: "3.8"
services:
one:
image: yourname/yourimage-one
ports:
- "4444:4000"
two:
image: yourname/yourimage-two
ports:
- "5555:5000"
有关更高级的设置,请参考Docker-撰写关于网络的文档。
我假设您谈论的是使用JSON作为数据格式的REST API。有很多方法可以做到这一点。Express本身用于构建服务器端,而不是客户端。您可以使用标准API(如nodejs文档中所示)或几个第三方库中的一个来执行请求。例如,Axios是一个非常流行的http请求库。请参见节点文档中的axios示例。
在大多数情况下,在两个方向上使用http请求进行循环连接并不是一个好主意。也许两者中的一个可以充当生产服务,而另一个更像是消费服务?