【发布时间】:2016-12-16 14:12:49
【问题描述】:
此 Meteor App 服务器代码尝试使用另一个 Meteor 工作人员的方法。应用程序和工作人员都位于同一服务器 EC2 上的单独 docker 容器中。工作程序在端口 9000 上运行。
当应用程序触发方法appCallingWorker 时,我希望看到工作容器会注销字符串“从应用程序调用的工作人员”,但所有docker logs containerID 给出的都是这样的许多行:stream error Network error: ws://localhost:9000/websocket: connect ECONNREFUSED 127.0.0.1:9000
如何在 App 中使用 worker 的方法?谢谢
//App/server/main.js
let workerConn = DDP.connect('http://localhost:9000');
Meteor.methods({
'appCallingWorker': () => {
workerConn.call('workerMethod');
}
});
//Worker/server/main.js
Meteor.methods({
'workerMethod': function () {
console.log('worker called from App');
}
})
编辑
EC2 是 AWS ECS 中的一个容器实例。并且 containerDefinitions.portMapings.containerPort 和 hostPort 都设置为 9000。
edit 2
docker 主机上的 iptables -L -n 显示在 9000 上侦听的容器的 ip,我将代码中的 localhost 替换为所述 ip,现在它可以工作了。但是,如果主机重新启动或容器重新启动,则所述 ip 可能会发生变化……另一个需要解决的问题。
【问题讨论】:
-
连接被拒绝,意味着 localhost:9000 上没有任何监听。如果您的应用程序位于单独的 docker 容器中,它们是否有自己的 ip,您是否应该尝试连接到该容器?
-
@Mikkel 我在编辑我的帖子时回答了你很好的观察。谢谢你的意见。如果我的流程不完整,请提供更多信息。
-
您所做的只是将 localhost 替换为 127.0.0.1 - 这不是有效的网络地址,
-
@Mikkel 我明白了。所以
iptables -L -n向我展示了 9000 的 ip,将 localhost 替换为该 ip 并且它可以工作。但是该数字可以在 EC2 重新启动或容器重新启动时随时更改,那么我该如何进行此“自动发现”?谢谢 -
你可以使用Route53来锁定一个固定的IP地址,甚至可以使用你在代码中输入的名称(例如myserver.mydomain.com)的动态地址