2
respostas

Dúvida de implementação com Apache Camel

Nico,

Estou curtindo muito o curso de Camel, porém tenho estou em dúvida da utilização deste em uma integração que precisamos implementar. Segue meu caso de uso: Estou envolvido em um projeto onde precisariamos desenvolver uma integração com um software para o RH de uma grande empresa. O projeto consiste basicamente em permitir que alguns gestores autorizem em massa/ou pontualmennte requisições de horas-extra diretamente na posição de atendimento dos colaboradores, estas requisições de hora-extra deverão ocorrer de forma bi-direcional, ou seja, tanto o gestor, quanto o colaborador podem requisitar esta solicitação. Sendo que tanto as solicitações feitas pelo colaborador quanto pelo gestor precisam ser aprovadas (colaborador iria aprovar a requisição no caso de ter disponibilidade de tempo após sua escala de trabalho). No caso de solicitação do colaborador, deverão ser submetidas a aprovação do gestor imediato mediante a quantidade horas solicitadas pelo colaborador. Para esta implementação estava pensando em expor serviços padrão SOA que controlariam uma fila JMS, porém acredito esta não ser a melhor opção, já que as mensagem padrão JMS são assincronas e eu precisaria controlar o "status" da mensagem (saber se a requisição de hr-extra enviada pelo colaborador foi aprovada pelo gestor e vice-versa). Para esta implementação, conseguiria utilizar o Camel ? Basicamente iria criar uma ferramenta web/ou desktop onde o gestor/colaboradores consumiria os serviços expostos afim de enviar as requisições de hora-extra, sempre esperando uma confirmação/negação do end-point ? Por JMS trabalhar de forma assincrona acredito não ser viável utilizando esta, porém nos primeiros treinamento de Camel ví que poderia enviar uma mensagem de modo "inOut". Cada posíção de atendimento possui uma porta socket aberta para troca de mensagens.

2 respostas

Oi Felipe, nao sou Nico, mas acho que posso responder :). O seu caso, pelo menos para mim, pode ser apenas um servico exposto com uma chamada sincrona mesmo...

O colaborador ou gestor vai fazer a requisicao, vc vai salvar e em outro momento alguem vai liberar. Parece um fluxo padrao.

Olá Alberto, muito obrigado pelo retorno. Deixe-me ver se entendi bem a sua resposta: 1- Eu iria expor um serviço ao qual o gestor iria consumir e requisitar uma solicitação de hr-extra. 2- Ao receber a requisição o meu serviço iria realizar uma conexão socket com a posição de atendimento (fazendo uma simples consulta no DB consigo saber o host ao qual o colaborador esta trabalhando no dia). 3- Na posição de atendimento o colaborador aprovaria a solicitação.

Até aqui, é mais ou menos o que tinha pensado, porém não estou conseguindo visualizar se seria a melhor implementação quanto: * Não posso manter a conexão estendida com a posição atendimento por muito tempo, e é normal os colaboradores saiam da posição de atendimento para realizar outras tarefas. E é um requisito que o tempo de vida da requisição dure até o logout do mesmo na ferramenta. Por isso estava pensado em implementar uma especie de fila em uma tabela de BD, ao qual o serviço exposto iria gravar a requisição e um segundo processo, iria monitorar esta fila e encaminhar as requisições de hr-extra aos devidos hosts via socket e processar/controlar os respectivos "responses" pendentes (aprovado/reprovado pelo colaborador). Como não quero reinventar a roda, existe um padrao EAI para este tipo de aplicação ? O Camel conseguiria me ajudar ou realmente uma sua solução é a mais indicada ?