Explorar o conteúdo e a serialização de mensagens no Barramento de Serviço
As mensagens carregam um conteúdo e metadados. Os metadados estão na forma de propriedades de par chave-valor, descrevem o conteúdo e oferecem instruções de tratamento para o Barramento de Serviço e para aplicativos. Ocasionalmente, esses metadados sozinhos são suficientes para carregar as informações que o remetente deseja comunicar aos destinatários e o payload permanece vazio.
O modelo de objeto dos clientes oficiais do Barramento de Serviço para .NET e Java mapeia de/para os protocolos de transmissão compatíveis com o Barramento de Serviço.
Uma mensagem do Barramento de Serviço consiste em uma seção de payload binário que o Barramento de Serviço nunca manipula em nenhuma forma no lado do serviço e dois conjuntos de propriedade. As propriedades do agente são definidas pelo sistema. Essas propriedades predefinidas controlam a funcionalidade de nível de mensagem dentro do agente ou são mapeados para os itens de metadados comuns e padronizados. As propriedades do usuário são uma coleção de pares chave-valor definida pelo aplicativo.
Roteamento e correlação de mensagens
Um subconjunto das propriedades do agente, especificamente To
, ReplyTo
, ReplyToSessionId
, MessageId
, CorrelationId
e SessionId
, ajuda os aplicativos a rotear mensagens para destinos específicos. Os seguintes padrões descrevem o roteamento:
Solicitação/resposta simples: um editor envia uma mensagem para uma fila e espera uma resposta do consumidor da mensagem. O editor tem uma fila para receber as respostas. O endereço dessa fila está contido na propriedade
ReplyTo
da mensagem de saída. Quando o consumidor responde, ele copia aMessageId
da mensagem em questão para a propriedadeCorrelationId
da mensagem de resposta e a entrega para o destino indicado pela propriedadeReplyTo
. Uma mensagem pode render várias respostas, dependendo do contexto do aplicativo.Solicitação/resposta multicast: como uma variação do padrão anterior, um editor envia a mensagem para um tópico, e vários assinantes se tornam qualificados para consumir a mensagem. Cada um dos assinantes pode responder da maneira descrita anteriormente. Se
ReplyTo
aponta para um tópico, esse conjunto de respostas de descoberta pode ser distribuído para um público-alvo.Multiplexação: esse recurso de sessão permite a multiplexação de fluxos de mensagens relacionadas por meio de uma única fila ou assinatura, de modo que cada sessão (ou grupo) de mensagens relacionadas, identificadas por valores correspondentes da
SessionId
, seja roteada para um receptor específico enquanto o receptor mantém a sessão bloqueada. Leia mais sobre os detalhes das sessões aqui.Solicitação/resposta multiplexada: esse recurso de sessão permite respostas multiplexadas, permitindo que vários editores compartilhem uma fila de resposta. Ao definir
ReplyToSessionId
, o editor pode instruir um ou mais consumidores a copiar esse valor na propriedadeSessionId
da mensagem de resposta. A fila ou tópico de publicação não precisa ter reconhecimento de sessão. Quando a mensagem é enviada, o editor pode aguardar uma sessão com a determinadaSessionId
ser materializada na fila aceitando condicionalmente um receptor de sessão.
O roteamento em um namespace do Barramento de Serviço usa as regras de encadeamento de encaminhamento automático e de assinatura de tópico. O roteamento entre namespaces pode ser realizado usando o Azure LogicApps. A propriedade To
está reservada para uso futuro. Os aplicativos que implementam roteamento devem fazer isso com base nas propriedades do usuário e não depender da propriedade To
. No entanto, fazer isso não causará problemas de compatibilidade.
Serialização de payload
Quando estiver em trânsito ou armazenado dentro do Barramento de Serviço, o payload é sempre um bloco opaco e binário. A propriedade ContentType
permite que os aplicativos descrevam o conteúdo com o formato sugerido para os valores de propriedade, sendo uma descrição de tipo de conteúdo MIME de acordo com a IETF RFC2045; por exemplo, application/json;charset=utf-8
.
Ao contrário das variantes Java ou .NET Standard, a versão .NET Framework da API Barramento de Serviço dá suporte à criação de instâncias BrokeredMessage
ao passar objetos .NET arbitrários para o construtor.
O protocolo SBMP herdado serializa objetos com o serializador binário padrão ou com um serializador fornecido externamente. O protocolo AMQP serializa objetos em um objeto AMQP. O receptor pode recuperar esses objetos com o método GetBody<T>()
, fornecendo o tipo esperado. Com AMQP, os objetos são serializados em um gráfico AMQP dos objetos ArrayList
e IDictionary<string,object>
, e qualquer cliente do AMQP pode decodificá-los.
Embora essa mágica de serialização oculta seja conveniente, se os aplicativos devem assumir o controle explícito da serialização do objeto e transformar os grafos de objeto em fluxos antes de incluí-los em uma mensagem, então eles devem fazer a operação contrária do lado do receptor. Embora o AMQP tenha um avançado modelo de codificação binária, ele está vinculado ao ecossistema de mensagens AMQP e os clientes HTTP tem problemas para decodificar esses conteúdos.