Método para lidar com “matou” empregos Java?
-
06-07-2019 - |
Pergunta
O aplicativo de servidor web vai lidar com trabalhos que são solicitados por solicitações de API REST.
O ideal seria se as matrizes de servidor durante um trabalho (ou seja: plugue puxado), o trabalho deve continuar ou reiniciar na inicialização.
Uma maneira muito conveniente para processar estes trabalhos é em um segmento separado usando algumas das classes de utilitários concorrentes em Java 5. O único problema é, dado um fracasso, você precisa ter escrito os detalhes do trabalho e criar um processo que lê esses detalhes na inicialização e retoma os trabalhos. Esta parece ser uma dor de fazer.
Uma abordagem alternativa é usar uma fila onde o usuário faz pedido, nós escrevemos para a fila, em seguida, ler a partir de fila e executar o trabalho e só remover a mensagem quando o trabalho for concluído. Isto torna mais fácil para retomar o trabalho no arranque como o servidor irá apenas ler a partir da fila na inicialização e retomar o processo.
Há algum melhores abordagens a este cenário?
Solução
Uma vez que você tenha especificado REST, você obviamente tem clientes que fazem pedidos e exigem resultados. Por que não colocar o ônus de determinar se eles já concluída em os próprios clientes .
por exemplo. um cliente faz um pedido. Se ele recebe uma volta resultado, tudo muito bem. Se, no entanto, o cliente detecta que o servidor tenha ido feito (através de uma desconexão prematura na conexão HTTP), então ele pode recuar e tente novamente mais tarde. Se desejar, você pode implementar várias estratégias de repetição (por exemplo repetição em um host diferente, desistir depois 'n' tentativas etc.).
Desta forma, os clientes manter o conhecimento de que eles exigem (como eles devem fazer de qualquer maneira, presumivelmente) e seus servidores são apátridas, que é muito mais fácil de gerir.
Outras dicas
Eu usaria Quartz (que tem fail-over capacidades) para gerir os seus postos de trabalho.
PS: Eu prefiro estar errado, mas, depois de ler suas últimas perguntas, eu tenho a sensação de que você está construindo algo demasiado complicada ou conceitualmente errado. Há apenas muitos arquitetura cheira IMHO.