Ir para conteúdo
  • Cadastre-se

dev botao

Como posso garantir a transação Put no Rest Quando há quebra de link de internet?


Ver Solução Respondido por karlouchoa,
  • Este tópico foi criado há 1575 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado
Boa tarde meus amigos, posso tirar uma dúvida aqui pelo nosso grupo?
Estou implementando uma integração entre um banco de dados local e outro na nuvem da Amazon.
Estou com um problema sério aqui: ao fazer o Putclientes, por exemplo, ou seja, ao enviar ao servidor as alterações e inserções do Banco local, se, após um insert em lote na tabela da nuvem, o Result da função Put não conseguir retornar ao cliente rest que o chamou, por uma queda do link de internet, por exemplo, esses inserts já foram commitados na nuvem, mas os relacionamentos entre o código externo gerado e o código interno enviado, não pode ser concebida.
Sendo assim, no próximo Put, os clientes sem a relação entre os códigos, serão inseridas novamente, gerando duplicidade de cadastros na nuvem.
Meu problema é saber como commitar a transação na nuvem somente após o Result chegar ao cliente rest que fez a chamada.
Alguém pode me ajudar com isso?
  • Moderadores
Postado

Depende muito de como você estruturou essa integração.
Lá na AWS você tem uma api?
Como você monta o pacote de envio? você tem algum flag para indicar que já foram enviados?
Se sim! quando ocorre o erro você pode faz uma requisição para confirmar se foram gravados.
Mas eu consigo pensar várias formas de fazer esse controle!

Se conseguir explicar um pouco melhor talvez fique mais fácil de ajudar.

Postado

Bom dia Waldir,

Não posso controlar com flag´s, já que trata-se de uma transferência de mãos duplas, onde o status do Pedido de vendas, por exemplo, pode ser alterado por qualquer dos pontos de envio, e depois precisará retornar ao ponto original.

Minha estrurura é:      Matriz <-> AWS <->Filial

mais ou menos assim, pois ainda entra o app de vendas. 

Tenho uma aplicação Datasnap/Rest nos dois lados. Faço integração um campo auto-incremento, testando a existência no campo no update ( where Autocod = AutocodExt), caso o retorno do update seja  = 0,  faço o insert, editando o campo do json traduzido para a FDMemtable com o ultimo autocod gerado. O result da function put gera o relacionamento no lado cliente, como descrito em um dos episódios da Delphi Academy, mas se o result não chega ao lado cliente, por uma quebra no link de internet, não consigo efetuar o rollback no lado servidor.    

 

Postado
Em 30/05/2020 at 21:33, Waldir Paim disse:

Depende muito de como você estruturou essa integração.
Lá na AWS você tem uma api?
Como você monta o pacote de envio? você tem algum flag para indicar que já foram enviados?
Se sim! quando ocorre o erro você pode faz uma requisição para confirmar se foram gravados.
Mas eu consigo pensar várias formas de fazer esse controle!

Se conseguir explicar um pouco melhor talvez fique mais fácil de ajudar.

me dá uma luz Waldir

  • Moderadores
Postado

Bom dia,

Temos que manter na aplicação que enviou algo que conseguimos recuperar no momento do erro.

Penso em algo para você conseguir dizer que esses lote de registros foram enviados mas ocorreu um erro no envio.

Marque nesses registros que foram enviados que houve um erro e precisam ser conferidos antes do próximo envio.    

Você também pode criar um log de controle onde você pode recuperar esses registros e retentar novamente.

 

  • Moderadores
Postado
2 horas atrás, karlouchoa disse:

me dá uma luz Waldir

Acho que consegui uma solução simples.

Poe na base de dados do servidor uma UNIQUE KEY para não deixar duplicar os registros.

Escolhe uma chave unica ou cria uma chave unica e envia junto.

Quando ocorrer essa violão você filtra por essa chave e retorna para a aplicação que enviou esse id.

Acho que isso resolver mais simples.

  • 1 mês depois ...
  • Solution
Postado

Para fechar esse Post, já agradecendo as dicas dos amigos, venho dizer que consegui resolver  com a implementação de Call Backs.
 

Se algum outro participante tiver interesse eu posso postar o código aqui.

 

Obrigado mesmo gente. Valeu!

 

  • Curtir 1
  • Este tópico foi criado há 1575 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.