Я использую пакет request от NPM для обработки внутренней связи между службами. Я также установил правильный DNS-сервер (используя Hashicorp Consul в качестве SD и DNS).
Я могу копать на своем локальном компьютере (где работают службы) DNS-сервер консула, и я могу получить правильный ответ (IP-адрес и номер порта.
Как настроить DNS в файле app.js6
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 }
Я хочу иметь возможность делать запросы к службе «auth» при использовании Consul в качестве моего DNS-сервера. В настоящее время у меня есть очень хакерский способ сделать это, но я действительно хотел бы использовать DNS.
Я нашел это, но это относится к пакету axios, а не к запросу, который я пытаюсь использовать, хотя он выдает ту же ошибку, что и решение, которое там не помогло. Обнаружение службы Consul с DNS на Nodejs
dig
работает с IP-адресом, установленным в${config.consul.host}:8600
, то 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, но попробуйте отследить DNS-серверы, к которым пытается подключиться вашrequest.post
. - person bagljas   schedule 10.06.2019