Se as instâncias estiverem todas atrás de uma única
Input
com balanceamento de carga endpoint (por exemplo, 27017), cada vez que sua máquina cliente se conectar ao endpoint, ela será conectada a nós potencialmente diferentes no cluster de replicaset (e você não terá controle sobre qual instância foi). Isso pode explicar por que você às vezes tenta gravar no não-mestre e obtém um erro, mas todas as suas leituras funcionam (já que você provavelmente configurou o cluster do MongoDB para permitir leituras em nós secundários). As funções de trabalho também são compatíveis com
InstanceInput
endpoints, que permitem definir um intervalo de portas voltado para o exterior (digamos, 27017-27019), mapeando para uma única porta nas próprias instâncias do trabalhador (por exemplo, 27017). Se você fizer isso, seu aplicativo cliente agora pode se conectar a todas as três instâncias diretamente (27017, 27018, 27019). Muitos drivers suportam conexões de replicaset, então ele seria capaz de descobrir qual nó é o mestre, direcionando todas as gravações para ele. Não sei se o driver que você está usando no Android é compatível com conjuntos de réplicas. Se o driver não oferecer suporte a conjuntos de réplicas, você provavelmente desejará considerar a criação de uma camada de API que faça toda a comunicação com o banco de dados (uma boa prática a ser seguida em geral, de qualquer maneira, e você pode consultar os Serviços Móveis do Azure para uma maneira rápida de implementar isso). Então... se o endpoint do seu cluster de replicaset estiver configurado como
Input
, isso provavelmente explica o problema que você está vendo, que deve ser resolvido alternando o tipo de endpoint para InstanceInput
.