Nagłówki komunikatów i właściwości
W tej sekcji opisano nagłówki i właściwości komunikatów.
Nagłówki komunikatów
Podczas wysyłania komunikatu można określić następujące właściwości komunikatu. Jeśli jeden komunikat jest wysyłany lub odbierany, te właściwości są zawarte w nagłówku HTTP BrokerProperties w formacie zakodowanym w formacie JSON. Jeśli zostanie wysłana partia komunikatów, te właściwości są częścią treści HTTP zakodowanej w formacie JSON. Aby uzyskać więcej informacji, zobacz Wysyłanie komunikatów i wysyłanie wiadomości wsadowych.
W poniższej tabeli wymieniono właściwości Microsoft.ServiceBus.Messaging.BrokeredMessage . Właściwości mogą być wyświetlane w dowolnej kolejności. Jeśli właściwość nie jest określona, usługa Service Bus używa wartości domyślnej dla tej właściwości. Właściwości brokera inne niż wymienione są ignorowane. Zaakceptowane właściwości są niezależne od wartości określonej wersji interfejsu API. Specyfikator wersji interfejsu API nie jest wymagany w żądaniu HTTP.
Jeśli właściwości SessionId i PartitionKey są ustawione, muszą być ustawione na tę samą wartość.
Jeden nagłówek HTTP o nazwie BrokerProperties
zawiera wszystkie BrokeredMessage
nagłówki. Właściwości są sformatowane w formacie JSON. Ułatwia to rozszerzanie BrokeredMessage
właściwości. Ponadto jest on zgodny z modelem programowania internetowego, wykorzystując przyjazny dla Internetu format JSON. Dzięki temu można łatwo tworzyć i wykorzystywać właściwości komunikatów z mniejszym analizowaniem ciągów. Oto przykład nagłówków 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“}
W poniższej tabeli przedstawiono sposób BrokeredMessage
mapowania właściwości na nagłówki HTTP.
BrokeredMessage (SBMP) Części |
Typ | Nagłówek HTTP | Ułatwienia dostępu | HTTP Req/Res |
---|---|---|---|---|
Contenttype | ciąg | Content-Type | get, set | Req, Res |
CorrelationId | ciąg | BrokerProperties{CorrelationId} | get, set | Req, Res |
SessionID | ciąg | BrokerProperties {SessionId} | get, set | Req, Res |
Liczba dostaw | int | BrokerProperties {DeliveryCount } | get | Res |
LockedUntilUtc | DateTime | BrokerProperties{LockedUntil} | get | Res |
Blokada tokenu | Guid (identyfikator GUID) | BrokerProperties{LockToken} | get | Res |
Messageid | ciąg | BrokerProperties{MessageId} | get, set | Res |
Etykieta | ciąg | BrokerProperties {Label} | get, set | Req, Res |
Replyto | ciąg | BrokerProperties {ReplyTo} | get, set | Req, Res |
EnqueuedTimeUtc | Data i godzina | Data | get | Res |
SequenceNumber | długi | BrokerProperties {SequenceNumber} | get | Res |
TimeToLive | przedział_czasu | Kolekcja BrokerProperties {TimeToLive} | get, set | Req, Res |
Działanie | ciąg | BrokerProperties {To} | get, set | Req, Res |
ScheduledEnqueueTimeUtc | DateTime | BrokerProperties {ScheduledEnqueueTimeUtc} | get, set | Req, Res |
ReplyToSessionId | ciąg | BrokerProperties {ReplyToSessionId} | get, set | Req, Res |
PartitionKey | ciąg | BrokerProperties {PartitionKey} | get, set | Req, Res |
Oprócz tych właściwości można określić właściwości niestandardowe. Jeśli pojedynczy komunikat zostanie wysłany lub odebrany, każda właściwość niestandardowa zostanie umieszczona we własnym nagłówku HTTP. Jeśli zostanie wysłana partia komunikatów, właściwości niestandardowe są częścią treści HTTP zakodowanej w formacie JSON. Aby uzyskać więcej informacji, zobacz Wysyłanie komunikatów i wysyłanie wiadomości wsadowych.
Uwagi
DateTime
nagłówki są formatowane zgodnie z definicją WFC2616: https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3. Na przykład "Sun, 06 nov 1994 08:49:37 GMT".BrokerProperties {TimeToLive} to liczba sekund przedziału czasu (dwukrotnie).
ExpiresAtUtc
nie ma odpowiedniego nagłówka HTTP, ponieważ może pochodzić zDate
elementów iBrokerProperties {TimeToLive}
.Nagłówki komunikatów z metodą pobierania mogą pojawiać się tylko w odpowiedzi HTTP (na przykład odebrany komunikat). Gdy te nagłówki są obecne w żądaniu HTTP (tj. wysyłanym komunikacie), są one dyskretnie ignorowane. Nierozpoznane nagłówki HTTP są również ignorowane w trybie dyskretnym.
Jeśli wartość jest źle sformułowana, odpowiedni kod stanu HTTP jest zwracany do klienta.
Właściwości komunikatu
Właściwości komunikatu to pary klucz-wartość zdefiniowane przez użytkownika zawarte w pliku message.Properties
. W przypadku klienta o grubości SBMP wartości są ograniczone do byte
, sbyte
, char
, DateTime
ulong
long
float
uint
double
int
decimal
bool
ushort
short
string
Uri
Guid
DateTimeOffset
i .TimeSpan
W przypadku protokołu REST/HTTP Uri
i DateTimeOffset
nie są obsługiwane (jeśli znajdują się w elemecie BrokeredMessage
, nie są uwzględnione w nagłówkach HTTP). Typy identyfikatorów GUID są konwertowane na ciągi, a TimeSpan
typy są konwertowane na "łączną liczbę sekund". Z powodu tych konwersji zostanie utracona wierność typu. Każda nazwa właściwości odpowiadająca ograniczonemu nagłówkowi HTTP (na przykład , Connection
Expect
, itd.) jest również wykluczona.
Każda para klucz-wartość w pliku message.Properties
zostanie zamapowana na nagłówek HTTP w następującym formacie.
prop
jest nazwą klucza i value
jest ciągiem reprezentującym wartość:
prop_name: value
Typ wartości jest wnioskowany. Jeśli jest otoczony podwójnym cudzysłowem, wówczas:
Jeśli zawartość ma postać daty RFC2616, broker traktuje go jako
System.DateTime
.W przeciwnym razie broker usuwa cudzysłowy i traktuje zawartość jako
System.String
.
Jeśli nie jest otoczony podwójnym cudzysłowem, wówczas:
Jeśli zawartość ma wartość true lub false (uwzględniana jest wielkość liter!), broker traktuje ją jako wartość
System.Boolean
z odpowiednią wartością.Jeśli zawartość może być analizowana jako liczba całkowita, broker traktuje ją jako System.Int64.
Jeśli zawartość może być analizowana jako liczba zmiennoprzecinkowa, broker traktuje ją jako
System.Double
.W przeciwnym razie broker odrzuca komunikat.
Przykład:
product: Windows 7 Ultimate
price: 299.98
order-time: Fri, 04 Mar 2011 08:49:37 GMT
Treść wiadomości
Żadne konwersje nie są wykonywane między strumieniem treści żądania HTTP/odpowiedzi a elementem BrokerMessage.BodyStream
.
Content-Type
Ponadto nagłówek żądania HTTP jest zachowywany i zwracany do odbiornika komunikatów, aby umożliwić aplikacji poprawne interpretowanie bajtów w treści.
Jeśli komunikat zostanie utworzony z grubym klientem SBMP bez niestandardowego serializatora obiektów XML, typ zawartości będzie domyślnie "application/msbin1", czyli DataContractBinarySerializer
, chyba że aplikacja jawnie zmieni go (na przykład message.ContectType=”application/mytype”
) po utworzeniu komunikatu. Ta wartość typu zawartości jest zwracana do odbiorcy HTTP. Obowiązkiem aplikacji jest podjęcie decyzji, jak deserializować bajty w treści.
Powiązanie usługi Service Bus WCF ustawia ContentType
element na koder komunikatów ContentType
. Jeśli na przykład jest używany koder komunikatów tekstowych, oczekiwana Content-Type
“application/soap+xml”
wartość to .
Konwersja komunikatów
Konwersja między żądaniem/odpowiedzią HTTP a komunikatem jest wykonywana u dostawcy środowiska uruchomieniowego obsługi komunikatów HTTP. Metody konwersji są rozszerzone w celu uwzględnienia mapowania nagłówka/właściwości w tabeli we wcześniejszej części tej sekcji oraz zachowania typu zawartości komunikatu.