Este código é executado sem erros, mesmo se não houver um servidor local em execução. É um comportamento correto ou um bug?
const redis = require('redis')
const redisClient = redis.createClient({ retry_strategy: () => 1000 })
@mikhailsidorov - Sim, correto, pois as opções padrão são 'localhost' e 6379 respectivamente.
Ah, mas você está afirmando que não há um servidor Redis local em execução? hahaha
Isso seria incrivelmente estranho.
Garanto que você ainda tem uma instância do Redis em execução ... vá para o console da linha de comando do Linux.
Ver todas as instâncias em execução do Redis
ps -aux | grep redis-server
Elimine todas as instâncias do Redis
killall redis-server
Fechar tíquete?
Corri no docker, sem redis. Deixe-me verificar novamente.
O Redis deve estar rodando em algum lugar, tentei no meu ambiente e executei /etc/init.d/redis-server stop
. A primeira vez que fez exatamente como você mencionou, fiquei perplexo! Então executei ps -aux | grep redis-server
descobri que tinha sete instâncias do Redis em execução em segundo plano, lol. Depois de matar todos, o nó foi redefinido imediatamente, conforme o esperado.
@mikhailsidorov - Sim, correto, pois as opções padrão são 'localhost' e 6379 respectivamente.
Ah, mas você está afirmando que não há um servidor Redis local em execução? hahaha
Isso seria incrivelmente estranho.Garanto que você ainda tem uma instância do Redis em execução ... vá para o console da linha de comando do Linux.
Ver todas as instâncias em execução do Redis
ps -aux | grep redis-server
Elimine todas as instâncias do Redis
killall redis-server
Fechar tíquete?
Não há processos redis-server na minha máquina e no docker container. Além disso, não tenho nenhum processo de escuta da porta 6379 ( netstat -an | grep 6379
não retorna nada).
O Redis deve estar rodando em algum lugar, tentei no meu ambiente e executei
/etc/init.d/redis-server stop
. A primeira vez que fez exatamente como você mencionou, fiquei perplexo! Então executeips -aux | grep redis-server
descobri que tinha sete instâncias do Redis em execução em segundo plano, lol. Depois de matar todos, o nó foi redefinido imediatamente, conforme o esperado.
Não encontrei nenhum processo do redis-server rodando.
Preparei um exemplo para reproduzir o problema, consulte este repositório https://github.com/mikhailsidorov/redis-issue
Este código está sendo executado sem erros, e não tenho processos de redis-server executados na máquina testada e no contêiner do docker.
Por acaso você está executando o redis-mock ou algo semelhante? (Duvido, só checando ...)
https://github.com/faeldt/redis-mock
Aqui está o erro que recebo quando desligo o Redis e executo meu aplicativo ... (Este não é o aplicativo docker que você forneceu) Eu preciso configurar o docker, ainda não estou usando o docker, tenho que seguir com os tempos. Vou tentar um pouco mais tarde ...
Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1054:14)
Emitted 'error' event at:
at RedisClient.on_error (/mnt/c/indospace.io/services/node_modules/redis/index.js:406:14)
at Socket.<anonymous> (/mnt/c/indospace.io/services/node_modules/redis/index.js:279:14)
at Socket.emit (events.js:196:13)
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at processTicksAndRejections (internal/process/task_queues.js:84:17)
Por acaso você está executando o redis-mock ou algo semelhante? (Duvido, só checando ...)
https://github.com/faeldt/redis-mockAqui está o erro que recebo quando desligo o Redis e executo meu aplicativo ... (Este não é o aplicativo docker que você forneceu) Eu preciso configurar o docker, ainda não estou usando o docker, tenho que seguir com os tempos. Vou tentar um pouco mais tarde ...
Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1054:14) Emitted 'error' event at: at RedisClient.on_error (/mnt/c/indospace.io/services/node_modules/redis/index.js:406:14) at Socket.<anonymous> (/mnt/c/indospace.io/services/node_modules/redis/index.js:279:14) at Socket.emit (events.js:196:13) at emitErrorNT (internal/streams/destroy.js:91:8) at emitErrorAndCloseNT (internal/streams/destroy.js:59:3) at processTicksAndRejections (internal/process/task_queues.js:84:17)
Não, eu não uso o redis-mock. Quando executo const redisClient = redis.createClient()
sem opções, recebo o mesmo erro, mas quando passo { retry_strategy: () => 1000 }
, recebo este problema.
ok, acho que estamos na mesma página agora ...
Sim, o código de nova tentativa de conexão / reconexão do node_redis parece completamente quebrado no momento, há vários tíquetes abertos referentes a esses problemas. Recebi solicitações de RP em outros módulos do nodeJS esta noite, vou tentar mergulhar nisso e enviar uma RP válida quando puder.
ok, acho que estamos na mesma página agora ...
Sim, o código de nova tentativa de conexão / reconexão do node_redis parece completamente quebrado no momento, há vários tíquetes abertos referentes a esses problemas. Recebi solicitações de RP em outros módulos do nodeJS esta noite, vou tentar mergulhar nisso e enviar uma RP válida quando puder.
Obrigado
Isso é um tanto intencional. Verifique connect_timeout
: Default is to try connecting until the default system socket timeout has been exceeded and to try reconnecting until 1h has elapsed.
.
A intenção é ter uma função muito poderosa onde toda a lógica de reconexão esteja nas mãos do usuário. Porém, pode nem sempre ser ideal.
Isso é um tanto intencional. Verifique
connect_timeout
:Default is to try connecting until the default system socket timeout has been exceeded and to try reconnecting until 1h has elapsed.
.A intenção é ter uma função muito poderosa onde toda a lógica de reconexão esteja nas mãos do usuário. Porém, pode nem sempre ser ideal.
Obrigado pelo esclarecimento.
@mikhailsidorov - fechar problema?
@knoxcard Eu gostaria de manter isto em aberto para eu mesmo olhar para isso novamente quando eu encontrar algum tempo.
@knoxcard, obrigado por analisar alguns problemas aqui! Você está interessado em ajudar mais em geral?
@BridgeAR - absolutamente! como devo ajudar mais?
@mikhailsidorov - fechar problema?
Claro, se for necessário. Obrigado
@mikhailsidorov - deixa pra lá de encerrar a questão, a BridgeAr quer manter essa questão aberta, obrigado!