Depois de algumas pesquisas aqui minhas considerações:
- Geralmente, é uma boa prática implementar algum tipo de lógica de repetição em todos os recursos que você acessa no Azure (banco de dados, VM, ...). Para MongoDb, há uma implementação parcial, portanto, você deve potencialmente escrever sua própria. Consulte também este problema e este .
- Se possível, todos os recursos no Azure devem estar na mesma Rede Virtual do Azure (dessa forma, todas as conexões são feitas usando o IP privado do Azure em vez do IP público. Isso também é útil por motivos de segurança, pois você não precisa abrir o ponto de extremidade ao público.
- Ao implantar o MongoDb no Azure, tente seguir as diretrizes oficiais do MongoDb .
- Neste caso específico, você deve definir o
net.ipv4.tcp_keepalive_time
para um valor menor que o tcp keep alive do Azure, que por padrão é 240 segundos. Desta forma a conexão é fechada e o driver MongoDb pode interceptar esta condição e abrir uma nova conexão. Se a conexão for fechada pelo Azure, o driver não poderá interceptá-la. Se você quiser alterar essa configuração no Azure (não recomendado), poderá encontrá-la na configuração de IP público.
No meu ambiente de desenvolvimento, configurei o
net.ipv4.tcp_keepalive_time
para 120 e agora tudo parece funcionar bem. Considere que, se você hospedar o MondoDb dentro de um contêiner do Docker, deverá definir essa configuração no host do Docker. Aqui alguns outros links úteis:
- http://focusmatic. tumblr.com/post/39569711018/solving-mongodb-connection-losses-on-windows-azure
- https://docs.mongodb.org/ecosystem/platforms/windows -azure/
- https ://michaelmckeownblog.wordpress.com/2013/12/04/resolving-internal-ips-vs-dns-names-between-vms/
- https://gist.github.com/davideicardi/f2094c4c3f3e00fbd490
- Problemas de conexão do MongoDB no Azure
- Tempos limite de conexão do MongoDB (Azure)