Compartilhar via


Cenários de roteamento

Embora o serviço de roteamento seja altamente personalizável, pode ser um desafio criar uma lógica de roteamento eficiente ao criar uma nova configuração do zero. No entanto, há vários cenários comuns que a maioria das configurações do serviço de roteamento segue. Embora esses cenários possam não se aplicar diretamente à sua configuração específica, entender como o serviço de roteamento pode ser configurado para lidar com esses cenários ajudará você a entender o próprio serviço de roteamento.

Cenários comuns

O uso mais básico do serviço de roteamento é agregar vários pontos de extremidade de destino para reduzir o número de pontos de extremidade expostos aos aplicativos cliente e, em seguida, usar filtros de mensagem para rotear cada mensagem para o destino correto. As mensagens podem ser roteadas com base em requisitos de processamento lógico ou físico, como um tipo de mensagem que deve ser processado por um serviço específico, ou com base em necessidades comerciais arbitrárias, como fornecer processamento prioritário de mensagens de uma fonte específica. A tabela a seguir lista alguns dos cenários comuns e quando eles são encontrados:

Cenário Usar quando
Controle de versão de serviço Você precisa ter suporte a várias versões de um serviço ou pode implantar um serviço atualizado no futuro
Fornecer particionamento de dados Você deve fornecer particionamento de um serviço em vários hosts
Atualização dinâmica Você deve reconfigurar dinamicamente a lógica de roteamento em tempo de execução para lidar com a alteração das implantações de serviço
Multicast Você deve enviar uma mensagem para vários pontos de extremidade
Ponte de protocolo Você recebe mensagens em um protocolo de transporte e o ponto de extremidade de destino usa um protocolo diferente
Tratamento de erros Você precisa fornecer resiliência a interrupções de rede e falhas de comunicação

Observação

Embora muitos dos cenários apresentados sejam específicos para determinadas necessidades de negócios ou requisitos de processamento, planejar o suporte a atualizações dinâmicas e utilizar o tratamento de erros geralmente podem ser consideradas práticas recomendadas, pois permitem modificar a lógica de roteamento em tempo de execução e se recuperar de falhas transitórias de rede e comunicação.

Controle de versão de serviço

Ao introduzir uma nova versão de um serviço, geralmente você deve manter a versão anterior até que todos os clientes tenham migrado para o novo serviço. Isso é especialmente crítico se o serviço for um processo de longa execução que leva dias, semanas ou mesmo meses para ser concluído. Normalmente, isso requer a implementação de um novo endereço de ponto de extremidade para o novo serviço, mantendo o ponto de extremidade original para a versão anterior.

Usando o serviço de roteamento, você pode expor um ponto de extremidade para receber mensagens de aplicativos cliente e, em seguida, rotear cada mensagem para a versão de serviço correta de acordo com o conteúdo da mensagem. A implementação mais básica envolve a adição de um cabeçalho personalizado à mensagem que indique a versão do serviço pela qual a mensagem deve ser processada. O serviço de roteamento pode usar o XPathMessageFilter para inspecionar cada mensagem quanto à presença do cabeçalho personalizado e rotear a mensagem para o ponto de extremidade de destino apropriado.

Para ver as etapas usadas para criar uma configuração de controle de versão do serviço, consulte Como controlar a versão de serviço.

fornecer particionamento de dados

Ao criar um ambiente distribuído, geralmente é desejável espalhar a carga de processamento em várias máquinas para fornecer alta disponibilidade, diminuir a carga de processamento em máquinas individuais ou fornecer recursos dedicados para um subconjunto específico de mensagens. Embora o serviço de roteamento não substitua uma solução de balanceamento de carga dedicada, sua capacidade de executar o roteamento baseado em conteúdo pode ser usada para rotear mensagens semelhantes para destinos específicos. Por exemplo, você pode ter um requisito para processar mensagens de um cliente específico separadamente das mensagens recebidas de outros clientes.

Para ver as etapas usadas para criar uma configuração de particionamento de dados de serviço, consulte Como particionar dados de serviço.

Roteamento dinâmico

Geralmente, é desejável modificar a configuração de roteamento para atender às necessidades de negócios em mudança, como adicionar uma rota a uma versão mais recente de um serviço, alterar critérios de roteamento ou alterar o ponto de extremidade de destino para o qual a mensagem de filtro é roteada. O serviço de roteamento permite que você faça isso por meio do RoutingExtension, para que você possa fornecer um novo RoutingConfiguration durante o tempo de execução. A nova configuração entra em vigor imediatamente, mas afeta apenas as novas sessões processadas pelo serviço de roteamento.

Para ver as etapas usadas para implementar o roteamento dinâmico, consulte Como atualizar dinamicamente.

Multicast

Ao rotear mensagens, geralmente você roteia cada uma para um ponto de extremidade de destino específico. No entanto, ocasionalmente, talvez seja necessário rotear uma cópia da mensagem para vários pontos de extremidade de destino. Para executar o roteamento multicast, as seguintes condições devem ser verdadeiras:

  • A forma do canal não deve ser solicitação-resposta (embora possa ser unidirecional ou duplex), porque a solicitação-resposta exige que apenas uma resposta possa ser recebida pelo aplicativo cliente à solicitação.

  • Vários filtros devem retornar true ao avaliar a mensagem.

Se essas condições forem atendidas, cada ponto de extremidade de destino associado a um filtro que retorna true receberá uma cópia da mensagem.

Ponte de protocolo

Ao rotear mensagens entre protocolos SOAP diferentes, o serviço de roteamento usa APIs WCF para converter a mensagem de um protocolo para outro. Isso ocorre automaticamente quando os pontos de extremidade de serviço expostos pelo serviço de roteamento usa um protocolo diferente dos pontos de extremidade do cliente para os quais as mensagens são roteadas. É possível desabilitar esse comportamento se os protocolos em uso não forem padrão, mas você deve fornecer seu próprio código de ponte.

Tratamento de erros

Em um ambiente distribuído, não é incomum encontrar falhas transitórias de rede ou comunicação. Sem um serviço intermediário, como o serviço de roteamento, a carga de lidar com essas falhas recai sobre o aplicativo cliente. Se o aplicativo cliente não incluir lógica específica para tentar novamente em caso de falhas de rede ou comunicação e conhecimento de locais alternativos, o usuário poderá encontrar cenários em que uma mensagem deve ser enviada várias vezes antes de ser processada com sucesso pelo serviço de destino. Isso pode levar à insatisfação do cliente com o aplicativo, pois pode ser visto como não confiável.

O serviço de roteamento tenta corrigir esse cenário fornecendo recursos robustos de tratamento de erros para mensagens que encontram falhas relacionadas à rede ou à comunicação. Ao criar uma lista de possíveis pontos de extremidade de destino e associar essa lista a cada filtro de mensagem, você remove o ponto único de falha incorrido por ter apenas um destino possível. No caso de uma falha, o serviço de roteamento tentará entregar a mensagem para o próximo ponto de extremidade da lista até que a mensagem seja entregue, ocorra uma falha de não comunicação ou todos os pontos de extremidade tenham sido esgotados.

Para ver as etapas usadas para configurar o tratamento de erros, consulte Como lidar com erros.

Nesta seção

Como: Controle de versão de serviço

Como: fornecer particionamento de dados

Como: Atualização dinâmica

Como: Tratamento de erros

Confira também