Cabeçalhos e propriedades de mensagens
Esta seção descreve os cabeçalhos e propriedades de mensagens.
Cabeçalhos de mensagem
Ao enviar uma mensagem, você pode especificar as propriedades de mensagem a seguir. Se uma única mensagem for enviada ou recebida, essas propriedades estarão contidos no cabeçalho HTTP BrokerProperties em um formato codificado em JSON. Se um lote de mensagens for enviado, essas propriedades farão parte do corpo HTTP codificado em JSON. Para obter mais informações, consulte Enviar Mensagem e Enviar Lote de Mensagens.
A tabela a seguir lista as propriedades Microsoft.ServiceBus.Messaging.BrokeredMessage . As propriedades podem aparecer em qualquer ordem. Se uma propriedade não for especificada, o Barramento de Serviço usará o valor padrão dessa propriedade. Propriedades de agente que não aquelas listadas são ignoradas. As propriedades aceitas são independentes do valor de api-version especificado. O especificador api-version não é necessário na solicitação HTTP.
Se ambas as propriedades SessionId e PartitionKey forem definidas, elas deverão ser definidas com o mesmo valor.
Um cabeçalho HTTP de nome BrokerProperties
contém todos os cabeçalhos BrokeredMessage
. As propriedades estão formatadas no padrão JSON. Isso facilita a extensão das propriedades de BrokeredMessage
. Além disso, ele alinha o modelo de programação da Web ao aproveitar o formato amigável para Web JSON. Isso facilita a produção e o consumo das propriedades da mensagem com uma menor análise de cadeia de caracteres. A seguir, um exemplo de cabeçalhos de BrokeredMessage
:
BrokerProperties: { “SessionId”: “{27729E1-B37B-4D29-AA0A-E367906C206E}”, “MessageId”: “{701332E1-B37B-4D29-AA0A-E367906C206E}”, “TimeToLive” : 90, “CorrelationId”: “{701332F3-B37B-4D29-AA0A-E367906C206E}”, “SequenceNumber“ : 12345, “DeliveryCount“ : 2, “To“ : "http://contoso.com“, “ReplyTo“ : "http://fabrikam.com“, "EnqueuedTimeUtc“ : " Sun, 06 Nov 1994 08:49:37 GMT“, "ScheduledEnqueueTimeUtc“ : " Sun, 06 Nov 1994 08:49:37 GMT“}
A seguinte tabela ilustra como as propriedades de BrokeredMessage
são mapeadas para os cabeçalhos HTTP.
BrokeredMessage (SBMP) Partes |
Type | Cabeçalho HTTP | Acessibilidade | HTTP Req/Res |
---|---|---|---|---|
ContentType | string | Tipo de conteúdo | get, set | Req, Res |
CorrelationId | string | BrokerProperties{CorrelationId} | get, set | Req, Res |
SessionID | string | BrokerProperties {SessionId} | get, set | Req, Res |
DeliveryCount | INT | BrokerProperties {DeliveryCount } | get | Res |
LockedUntilUtc | Datetime | BrokerProperties{LockedUntil} | get | Res |
LockToken | Guid | BrokerProperties{LockToken} | get | Res |
MessageId | string | BrokerProperties{MessageId} | get, set | Res |
Rótulo | string | BrokerProperties {Label} | get, set | Req, Res |
ReplyTo | string | BrokerProperties {ReplyTo} | get, set | Req, Res |
EnqueuedTimeUtc | DateTime | Data | get | Res |
SequenceNumber | long | BrokerProperties {SequenceNumber} | get | Res |
timeToLive | TimeSpan | BrokerProperties collection {TimeToLive} | get, set | Req, Res |
Para | string | BrokerProperties {To} | get, set | Req, Res |
ScheduledEnqueueTimeUtc | Datetime | BrokerProperties {ScheduledEnqueueTimeUtc} | get, set | Req, Res |
ReplyToSessionId | string | BrokerProperties {ReplyToSessionId} | get, set | Req, Res |
PartitionKey | string | BrokerProperties {PartitionKey} | get, set | Req, Res |
Além dessas propriedades, você pode especificar propriedades personalizadas. Se uma única mensagem for enviada ou recebida, cada propriedade personalizada será colocada em seu próprio cabeçalho HTTP. Se um lote de mensagens for enviado, as propriedades personalizadas farão parte do corpo HTTP codificado em JSON. Para obter mais informações, consulte Enviar Mensagem e Enviar Lote de Mensagens.
Observações
DateTime
Os cabeçalhos são formatados conforme definido pelo RFC2616: https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3. Por exemplo, “Dom., 6 de nov. de 1994 08:49:37 GMT”.BrokerProperties {TimeToLive} é o número de segundos do TimeSpan (duplo).
ExpiresAtUtc
não tem um cabeçalho HTTP correspondente, porque pode ser derivado deDate
eBrokerProperties {TimeToLive}
.Os cabeçalhos de mensagem com um acessador get podem somente aparecer na resposta HTTP (isto é, a mensagem recebida). Quando esses cabeçalhos estão presentes na solicitação HTTP (isto é, a mensagem enviada), eles são ignorados silenciosamente. Cabeçalhos HTTP não reconhecidos também são ignorados silenciosamente.
Se o valor for mal formado, um código de status HTTP apropriado é retornado ao cliente.
Propriedades da mensagem
As propriedades da mensagem são pares de chave-valor definidos pelo usuário contidos em message.Properties
. Para o cliente denso SBMP, os valores estão restritos a byte
, sbyte
, char
, short
, ushort
, int
, uint
, long
, ulong
, float
, double
, decimal
, bool
, Guid
, string
, Uri
, DateTime
, DateTimeOffset
e TimeSpan
.
Para REST/HTTP, Uri
e DateTimeOffset
não são suportados (se eles estiverem em uma BrokeredMessage
, não estão incluídos nos cabeçalhos HTTP). Os tipos GUID são convertidos para cadeias de caracteres e os tipos TimeSpan
são convertidos para “segundos totais”. Devido a essas conversões, a fidelidade do tipo será perdida. Qualquer nome de propriedade que corresponda ao cabeçalho HTTP restrito (por exemplo, Connection
, Expect
e assim por diante) também é excluído.
Cada par chave-valor em message.Properties
será mapeado para um cabeçalho HTTP no formato a seguir.
prop
é o nome da chave e value
é a representação de cadeia de caracteres do valor:
prop_name: value
O tipo do valor está inferido. Se estiver fechado por aspas, então:
Se o conteúdo tiver um formato de data RFC2616, o agente o tratará como uma
System.DateTime
.Caso contrário, o agente removerá as aspas e tratará o conteúdo como sendo uma
System.String
.
Se não estiver fechado por aspas, então:
Se o conteúdo for verdadeiro ou falso (diferenciar maiúsculas e minúsculas), o agente o tratará como sendo um
System.Boolean
com o valor correspondente.Se o conteúdo puder ser analisado como um número inteiro, o agente o tratará como sendo um System.Int64.
Se o conteúdo puder ser analisado como um número em ponto flutuante, o agente o tratará como sendo um
System.Double
.Caso contrário, o agente rejeitará a mensagem.
Por exemplo:
product: Windows 7 Ultimate
price: 299.98
order-time: Fri, 04 Mar 2011 08:49:37 GMT
Corpo da mensagem
Nenhuma conversão é realizada entre o fluxo do corpo HTTP de solicitação/resposta e BrokerMessage.BodyStream
. Além disso, o cabeçalho Content-Type
da solicitação HTTP é preservado e retornado ao receptor da mensagem para permitir que o aplicativo interprete corretamente os bytes no corpo.
Se a mensagem for criada com o cliente denso SBMP sem um serializador de objeto XML personalizado, o tipo de conteúdo será padrão para “application/msbin1”, que é o DataContractBinarySerializer
, a não ser que o aplicativo o mude explicitamente (por exemplo, message.ContectType=”application/mytype”
) após a mensagem ser criada. O valor do tipo de conteúdo é retornado ao consumidor do HTTP. É responsabilidade do aplicativo decidir como desserializar os bytes no corpo.
A associação do Barramento de Serviço do WCF define o ContentType
como o do codificador de ContentType
mensagens. Por exemplo, se um codificador de mensagem de texto for usado, o Content-Type
deverá ser “application/soap+xml”
.
Conversão de mensagem
A conversão entre uma solicitação/resposta HTTP e uma mensagem é realizada no provedor do tempo de execução do sistema de mensagens HTTP. Os métodos de conversão são aumentados para incluir o mapeamento de cabeçalho/propriedades na tabela mencionada nesta seção e para preservar o content-type da mensagem.