我正在通过编写一个小的web应用程序来学习微服务体系结构。该应用程序包含以下组件,每个组件都将由docker容器托管。
在我用nodejs编写的api网关中,有一个地方我将调用:
request('http://service_b_ip_addr:port/get_service_b', callback);
然而,两者 service_b_ip_addr
以及 port
直到marathon创建了服务b的docker容器后才知道。
有了一些服务发现机制,比如mesosdns或marathonlb,我想我可以改变 service_b_ip_addr
像这样的 service_b.marathon.com
.
但我不知道我该怎么把 port
在我的节目里。
事先谢谢你的帮助。
附言:
我使用桥接网络模式,因为一个服务的多个示例可以位于同一个mesos从机上。所以呢 port
是一个随机数。
1条答案
按热度按时间ao218c7q1#
看看这个答案。
如果您使用marathonlb,那么就不需要传递端口,因为它是一个代理,它只需通过名称就可以知道服务的位置。
如果您使用mesos dns,您应该发出srv请求以获取ip和端口。在节点中,您可以使用
dns.resolveSrv(hostname, callback)
但是您的dns必须在defaul(53)端口上公开并支持srv请求(mesos dns支持它)。