Я получаю сообщения об ошибках тайм-аута при попытке использования клиентаasticsearch nodejs для проверки наличия индекса или псевдонима в кластере.
Экземпляр elasti c работает на docker с помощью этого docker -композитного файла он отвечает в браузере и на вызов client.ping ():
version: "2.2"
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.5.1
container_name: elasticsearch
environment:
- cluster.initial_master_nodes=elasticsearch
- cluster.name=es-cluster
- node.name=es1
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata1:/usr/share/elasticsearch/data
expose:
- "9200"
- "9300"
ports:
- "9200:9200"
- "9300:9300"
networks:
- docker-network
volumes:
esdata1:
driver: local
networks:
docker-network:
Это класс, который подключается к кластеру:
export default class EsClient {
private static client: Client;
public static getClient() {
if (!EsClient.client) {
const host = `http://localhost:9200`;
EsClient.client = new Client({
node: host,
maxRetries: 5,
requestTimeout: 10000,
resurrectStrategy: 'ping'
});
}
return EsClient.client;
}
}
Вот как я проверяю, существует ли псевдоним:
static async aliasExists(alias: string) {
const client = EsClient.getClient();
const params: any = { name: alias };
const result = await client.indices.existsAlias(params); // This times out
// Do stuff
}
Ошибка тайм-аута:
TimeoutError: Request timed out
at ClientRequest.<anonymous> (C:\projects\node-cdn\node_modules\@elastic\elasticsearch\lib\Connection.js:89:18)
at ClientRequest.emit (events.js:210:5)
at ClientRequest.EventEmitter.emit (domain.js:475:20)
at Socket.emitRequestTimeout (_http_client.js:690:9)
at Object.onceWrapper (events.js:299:28)
at Socket.emit (events.js:210:5)
at Socket.EventEmitter.emit (domain.js:475:20)
at Socket._onTimeout (net.js:469:8)
at listOnTimeout (internal/timers.js:531:17)
at processTimers (internal/timers.js:475:7) {
name: 'TimeoutError',
meta: {
body: null,
statusCode: null,
headers: null,
warnings: null,
meta: {
context: null,
request: [Object],
name: 'elasticsearch-js',
connection: [Object],
attempts: 5,
aborted: false
}
}
}
Это ответ от client.ping (), использующего тот же класс для получить объект клиента:
{
body: true,
statusCode: 200,
headers: {
'content-type': 'application/json; charset=UTF-8',
'content-length': '510'
},
warnings: null,
meta: {
context: null,
request: { params: [Object], options: [Object], id: 1 },
name: 'elasticsearch-js',
connection: {
url: 'http://localhost:9200/',
id: 'http://localhost:9200/',
headers: {},
deadCount: 0,
resurrectTimeout: 0,
_openRequests: 0,
status: 'alive',
roles: [Object]
},
attempts: 0,
aborted: false
}
}