BizTalk ESB Toolkit 2.0": Serviço de Roteamento Dinâmico

Vamos terminar nossos posts sobre o BizTalk ESB Toolkit com a ultima capacidade, o serviço de roteamento dinâmico.

Roteamento dinâmico representa uma parte crítica do pacote “BizTalk ESB Toolkit 2.0”. Um itinerário é um conjunto de instruções que define um fluxo de serviços que o barramento deve executar para uma determinada mensagem. Esta capacidade é disponibilizada através de um conjunto de serviços, “Pipelines” e “Schemas” de metadados bem definidos. Estes componentes funcionam em conjunto para manter a persistência e controlam o progresso ao longo do fluxo a cada serviço. Uma vantagem do mecanismo de itinerários é que eles são anexados no cabeçalho da mensagem e não exige qualquer implantação de orquestrações do BizTalk (workflows definidos em tempo de compilação no Visual Studio e executado pelo BizTalk). Portanto, itinerários oferecem uma maneira de compor serviços desacoplados baseados em artefatos existentes, eliminando o custo da construção, implantação e manutenção de orquestrações acopladas.

Um aspecto novo introduzido no pacote “BizTalk ESB Toolkit 2.0” é o Designer de itinerário incluído no Visual Studio .NET 2008. Basta clicar o botão direito do mouse no Visual Studio dentro de um projeto e adicionar um novo item de itinerário. Estas composições de serviços (itinerários) podem ser armazenadas localmente em um arquivo XML ou centralizados em um banco de dados central para o acesso corporativo. Os itinerários são resolvidos no “Enterprise Service Bus” com base nas informações contidas no cabeçalho das mensagens, que são encaminhadas através do barramento para uma série de provedores de serviços de uma forma síncrona ou assíncrona.

image

  1. O “Enterprise Service Bus” recebe a mensagem via o componente de entrada que suporta mensagens síncronas ou assíncronas.
  2. O “Enterprise Service Bus” inicia o processo de roteamento dinâmico.
  3. “Enterprise Service Bus” retorna a mensagem via componente de entrega para o consumidor do serviço com suporte para mensagens síncronas ou assíncronas.

Agora  estamos prontos para executar um exemplo de itinerário. Adicionar um service referência ao serviço do itinerário assíncrona localizadas em /ESB.ItineraryServices.WCF/ProcessItinerary.svc">https://<server>/ESB.ItineraryServices.WCF/ProcessItinerary.svc. A primeira atividade em nosso código é para ler o itinerário XML armazenado em arquivo e serializar um objeto:

    1:  try
    2:  {
    3:  //reference itinerary on disk
    4:  XmlDocument itineraryDoc = new XmlDocument();
    5:  itineraryDoc.Load(@"C:\exemplos\
    6:  Itineraries\Dinamico.xml");
    7:  StringReader itineraryReader =new StringReader(itineraryDoc.DocumentElement.OuterXml);
    8:   
    9:  //serialize XML into itinerary object
   10:  XmlSerializer ser = new XmlSerializer((typeof(Itinerary)),
   11:  "https://schemas.microsoft.biztalk.practices.esb.com/itinerary");
   12:  Itinerary basicItinerary = (Itinerary)ser.Deserialize(itineraryReader);
   13:   
   14:  //set unique ID
   15:  basicItinerary.uuid = Guid.NewGuid().ToString();
   16:   
   17:  //inflate actual XML payload of request
   18:  XmlDocument batchScanResult = new XmlDocument();
   19:  batchScanResult.LoadXml("<MaterialScannerOutput
   20:  xmlns=\"https://Seroter.BizTalkSOA.Chapter9.EsbBits\"><BatchId>BatchId_
   21:  0</BatchId><StageIndicator>StageIndicator_0</StageIndicator></MaterialScannerOutput>");
   22:  client.SubmitRequest(basicItinerary, batchScanResult.OuterXml);

Conforme já discutido neste artigo, podemos considerar o serviço de roteamento dinâmico o coração do “ESB”.Como no exemplo básico descrito acima, ele fornece os padrões e “Patterns” de desacoplamento para criar um ambiente de “SOI”. Este serviço, em conjunto com os outros, amplia o comportamento do BizTalk Server de um “Hub / Spoke” para um “ESB”.

Abraços Markus