Dúvida sobre o funcionamento do SOA

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:

  1. Consumidor B chama um endpoint de serviço Y com formato QWE no Service Bus.
  2. O Adaptador QWE transforma os dados do formato QWE para o formato interno do Bus.
  3. O Bus executa uma lógica de negócios para saber para onde rotear a chamada.
  4. 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.
  5. O Adaptador ASD transforma os dados do formato interno do Bus para formato ASD.
  6. O Serviço MNO recebe a requisição em ASD, inclui os funcionários, e retorna a mensagem em formato ASD.
  7. Adaptador ASD transforma a resposta para o formato interno.
  8. O Bus devolve a resposta para quem requisitou o serviço.
  9. O Adaptador QWE transforma os dados do formato interno para QWE.
  10. 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: