Bom dia, estava pesquisando sobre SOA, e acabei por encontrar este tópico, não sei o quanto o assunto do tópico é revelante a dúvida que tenho, mas minha dúvida é quanto a estas mensagens trocadas e conversão para modelos canônicos, estive olhando um site onde tem uma figura sobre a arquitetura de funcionamento do SOA, que está abaixo, o que eu não entendi e não consegui idealizar um caso real quando um consumidor 2 consome o serviço B, e o consumidor 3 consome o serviço C.
supondo que eu tenha um consumidor que tem a tabela de pessoa com a seguinte estrutura:
ID
NOME
SOBRENOME
e outro com a estrutura:
ID
NOMECOMPLETO
com estas estruturas acima, se eu precisar utilizar serviços de inclusão de pessoas um com os 3 parâmetros e outro com 2, supondo que o modelo canônico seja ID e NOMECOMPLETO, então o ESB converteria o nome e sobrenome para um campo só, de nomecompleto? é isto?
e quanto a conversão no Adaptador, por exemplo, para que ele serve?
Obrigado pela atenção!
A ideia do modelo canônico é padronizar a entrada e saída dos dados. Assim sendo, você não terá dois serviços de inclusão de uma mesma entidade, nem duas maneiras diferentes de fazer a mesma coisa, por um mesmo protocolo. Ou o schema de dados será ID, NOME, SOBRENOME, ou ID, NOMECOMPLETO, e todos os clientes deverão respeitar e preencher/receber esses campos adequadamente.
Sobre o adaptador, ele faz o serviço de traduzir as mensagens entre sistemas que não falam o mesmo protocolo. Por exemplo, um sistema que se comunica via arquivos textos, seja ele delimitado por caracteres (CSV), ou algum com formatação de tamanho fixo(fixed-width text file), falar com outro via SOAP, HTTP, FTP, IMAP, SMTP, JMS, AQ ou protocolos de sistemas muito específicos (HL7v2/DICOM em sistemas médicos, FIX em sistemas financeiros) ou proprietários (SAP, Siebel, Peoplesoft, J.D. Edwards).
Bem, eu entendi a questão de os protocolos serem heterogêneos, mas não estou conseguindo assimilar isso para um modelo real, vou tentar explicar o que eu entendi, supondo que eu tenha um sistema desenvolvido orientado a serviços:
Quando o consumidor A, consome o serviço X - No meu sistema orientado a serviços, construí um serviço para inclusão de funcionários para a minha empresa, onde a interface é ID e NOME, utilizo este serviço passando como parâmetro 1 e João, o meu serviço vai persistir no banco estas informações e retornar a resposta.
Quando o consumidor B, consome o serviço Y - No meu sistema feito em protocolo HTTP orientado a serviços da minha empresa, a qual tem espaço físico para 100 funcionários, caso o id do funcionário for maior que 100 vai utilizar o Adaptador para chamar a inclusão de funcionários de uma segunda empresa que adquiri mas que tem seus serviços utilizando SOAP, o Adaptador pega a resposta e transforma em um modelo canônico e me retorna a mensagem.
Quando o consumidor C, consome o serviço Z - ???
Quanto a questão do consumidor B consumir o serviço C está correto?
E no caso da transformação dentro o ESB, é uma alternativa ao Adaptador? quando devo usar um ou outro?
O Adaptador é um somente um programa(rotina de programação) que converte os dados e metadados de um formato X para o formato interno usado do ESB, e vice-versa. Resumindo, é um tradutor entre as partes.
Consumidor B consumindo serviço Y:
- Consumidor B chama um endpoint de serviço Y com formato QWE no Service Bus.
- O Adaptador QWE transforma os dados do formato QWE para o formato interno do Bus.
- O Bus executa uma lógica de negócios para saber para onde rotear a chamada.
- O Bus decide rotear para o serviço MNO (que o consumidor B não sabe que existe). O serviço MNO usa o formato ASD.
- O Adaptador ASD transforma os dados do formato interno do Bus para formato ASD.
- O Serviço MNO recebe a requisição em ASD, inclui os funcionários, e retorna a mensagem em formato ASD.
- Adaptador ASD transforma a resposta para o formato interno.
- O Bus devolve a resposta para quem requisitou o serviço.
- O Adaptador QWE transforma os dados do formato interno para QWE.
- Consumidor B recebe a resposta em formato QWE.
Normalmente o formato interno é XML, e o transformador transforma os dados dele, como juntar nome e sobrenome em uma única tag de nome completo.
Certo, e quanto ao consumidor C consumir um serviço Z, qual seria um caso real onde se aplicaria, um exemplo?
Desculpe, agora que vi que A, B e C são da imagem que você postou. O exemplo que dei acima é de um cenário mais genérico, não era do teu cenário.
O Adaptador na figura aparentemente está externo ao ESB, funcionando como um programa à parte para tradução das mensagens entre o ESB e o Serviço Y.
Normalmente quem faz esse trabalho de tradução é o próprio ESB, também usando um componente com esse mesmo nome, adaptador, para traduzir as mensagens. O terceiro exemplo com o Serviço Z está mostrando justamente isso, mas usando o nome de Transformação. Realmente é o processo é de transformação, mas o termo para esse tipo específico de componente é adaptador ou conector.
O caso que pode estar acontecendo no segundo exemplo é que o ESB não sabe falar o protocolo do Serviço Y, e precisa de um outro programa para traduzir as mensagens entre eles.
Espero não ter te deixado mais confuso ainda. :lol: