【发布时间】:2019-06-08 20:49:03
【问题描述】:
我正在使用 NPM 的 request 包来处理服务之间的一些内部通信。我还将 DNS 服务器设置为正确的服务器(使用 Hashicorp Consul 作为我的 SD 和 DNS)。
我可以在我的本地机器(服务正在运行的地方)上对 consul DNS 服务器进行挖掘,我能够得到正确的响应(IP 和端口号。
如何在 app.js 文件中设置 DNS 6
dns.setServers([ `${config.consul.host}:8600` ]);
设置在与 app.js 不同的文件中
options = {
baseUrl: `http://auth.service.consul`,
json: { '': '' },
headers: { authorization: '' }
};
与上述选项相同的文件
request.post(req.path, options, (error, response, body) => {
console.log(error);
if (error) throw error;
res.status(response.statusCode).json(body);
});
错误信息:
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)
errno: 'ENOTFOUND',
code: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'auth.service.consul',
host: 'auth.service.consul',
port: 80 }
当使用 Consul 作为我的 DNS 服务器时,我希望能够向“auth”服务发出请求。我目前有一种非常老套的方法,但我真的很想使用 DNS。
我确实找到了这个,但它与 axios 包有关,而不是我尝试使用的请求,即使它产生相同的错误,但那里的解决方案没有帮助。 Consul service discovery with DNS on Nodejs
【问题讨论】:
-
如果
dig对${config.consul.host}:8600中设置的IP 地址起作用,那么由于某种原因,dns.js 可能不会调用此DNS 服务器。来自文档nodejs.org/api/dns.html#dns_dns_setservers_serversThe dns.setServers() method affects only dns.resolve(), dns.resolve*() and dns.reverse() (and specifically not dns.lookup()).我对 JavaScript 不是很精通,但请尝试追踪您的request.post尝试联系的 DNS 服务器。