Tenha um Spring Integration
aplicativo que consiste em múltiplos integration flows
e, juntos, o aplicativo é implantado como um contêiner em Kubernetes
. O contêiner é dimensionado automaticamente conforme a carga.
Entre esses vários fluxos de integração, um desses fluxos tenta novamente os registros com falha do BD e, a qualquer momento, apenas uma instância dele deve ser executada (como a Quartz
integração em Spring Batch
).
Como esse comportamento pode ser implementado em Spring Integration
?
Você pode conseguir isso com um bloqueio distribuído: https://docs.spring.io/spring-integration/reference/distributed-locks.html . Então, mesmo que todos os seus nós esperassem por um bloqueio, apenas um deles seria capaz de processar esses registros pesquisados e assim por diante. Os nós restantes ficariam ociosos e encerrariam seu processo rapidamente com um resultado de pesquisa vazio.
Outro padrão é usar um
QueueChannel
back pelo DBMessageStore
, e apenas um nó puxaria o registro e o processaria. A próxima mensagem na fila pode ser processada por outro nó. Se o processamento falhar, a transação será revertida e a mensagem retornará ao DB. Veja mais informações nos documentos: https://docs.spring.io/spring-integration/reference/message-store.html