메시지 헤더 및 속성
이 섹션에서는 메시지 헤더 및 속성에 대해 설명합니다.
메시지 헤더
메시지를 보낼 때 다음 메시지 속성을 지정합니다. 메시지 하나가 전송되거나 수신되는 경우 이 속성은 JSON 인코딩 형식으로 BrokerProperties HTTP 헤더에 포함됩니다. 일괄 처리 메시지가 전송되는 경우 이 속성은 JSON 인코딩 HTTP 본문의 일부입니다. 자세한 내용은 메시지 보내기 및 메시지일괄 처리 보내기를 참조하세요.
다음 표에는 Microsoft.ServiceBus.Messaging.BrokeredMessage 속성이 나와 있습니다 . 속성은 임의의 순서로 표시될 수 있습니다. 속성을 지정하지 않으면 Service Bus는 해당 속성의 기본값을 사용합니다. 목록에 나오지 않은 브로커 속성은 무시됩니다. 허용되는 속성은 지정된 api-version의 값과 관계가 없습니다. api-version 지정자는 HTTP 요청에서 필수가 아닙니다.
SessionId 및 PartitionKey 속성이 모두 설정되는 경우 두 속성을 같은 값으로 설정해야 합니다.
BrokerProperties
라는 HTTP 헤더 하나에 모든 BrokeredMessage
헤더가 포함됩니다. 속성은 JSON 형식입니다. 따라서 BrokeredMessage
속성을 쉽게 확장할 수 있습니다. 또한 이 헤더는 웹용 JSON 형식을 활용하여 웹 프로그래밍 모델에 맞게 조정됩니다. 그러므로 더 적은 문자열 구문 분석을 수행하여 메시지 속성을 쉽게 생성하고 사용할 수 있습니다.
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“}
아래 표에서는 BrokeredMessage
속성이 HTTP 헤더에 매핑되는 방식을 설명합니다.
BrokeredMessage (SBMP) 부분 |
형식 | HTTP 헤더 | 액세스 가능성 | HTTP Req/Res |
---|---|---|---|---|
ContentType | 문자열 | 콘텐츠 형식 | get, set | Req, Res |
CorrelationId | 문자열 | BrokerProperties{CorrelationId} | get, set | Req, Res |
SessionID | 문자열 | 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 | 문자열 | BrokerProperties{MessageId} | get, set | Res |
레이블 | 문자열 | BrokerProperties {Label} | get, set | Req, Res |
ReplyTo | 문자열 | BrokerProperties {ReplyTo} | get, set | Req, Res |
EnqueuedTimeUtc | DateTime | 날짜 | Get | Res |
SequenceNumber | long | BrokerProperties {SequenceNumber} | Get | Res |
timeToLive | TimeSpan | BrokerProperties collection {TimeToLive} | get, set | Req, Res |
대상 | 문자열 | BrokerProperties {To} | get, set | Req, Res |
ScheduledEnqueueTimeUtc | DateTime | BrokerProperties {ScheduledEnqueueTimeUtc} | get, set | Req, Res |
ReplyToSessionId | 문자열 | BrokerProperties {ReplyToSessionId} | get, set | Req, Res |
PartitionKey | 문자열 | BrokerProperties {PartitionKey} | get, set | Req, Res |
이 속성 외에도 사용자 지정 속성을 지정할 수 있습니다. 단일 메시지를 보내거나 받는 경우 각 사용자 지정 속성은 해당하는 고유한 HTTP 헤더에 배치됩니다. 일괄 처리 메시지가 전송되는 경우 사용자 지정 속성은 JSON 인코딩 HTTP 본문의 일부입니다. 자세한 내용은 메시지 보내기 및 메시지일괄 처리 보내기를 참조하세요.
참고 사항
DateTime
헤더는 RFC2616에서 https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3정의한 대로 형식이 지정됩니다. 예를 들어 "Sun, 06 Nov 1994 08시 49분: 37 GMT"입니다.BrokerProperties {TimeToLive}는 TimeSpan (double)의 초 수입니다.
ExpiresAtUtc
에는 해당 HTTP 헤더가 없습니다.Date
및BrokerProperties {TimeToLive}
에서 파생될 수 있기 때문입니다.get 접근자가 포함된 메시지 헤더는 HTTP 응답(예: 수신된 메시지)에만 표시될 수 있습니다. 이러한 헤더는 HTTP 요청(예: 전송한 메시지)에 있는 경우 자동으로 무시됩니다. 인식되지 않는 HTTP 헤더도 자동으로 무시됩니다.
값의 형식이 잘못된 경우에는 적절한 HTTP 상태 코드가 클라이언트로 반환됩니다.
메시지 속성
메시지 속성은 message.Properties
에 포함된 사용자 정의 키-값 쌍입니다. SBMP 일반 클라이언트의 경우 값은 byte
, sbyte
, char
, short
, ushort
, int
, uint
, long
, ulong
, float
, double
, decimal
, bool
, Guid
, string
, Uri
, DateTime
, DateTimeOffset
및 TimeSpan
으로 제한됩니다.
REST/HTTP의 경우 Uri
및 DateTimeOffset
은 지원되지 않습니다. 이러한 값이 BrokeredMessage
에 있는 경우 HTTP 헤더에는 포함되지 않습니다. Guid 형식은 string으로 변환되고 TimeSpan
형식은 "총 시간(초)"으로 변환됩니다. 이러한 변환으로 인해 형식 충실도가 손실됩니다. 제한되는 HTTP 헤더에 해당하는 속성 이름(예: Connection
, Expect
등)도 제외됩니다.
의 message.Properties
각 키-값 쌍은 다음 형식의 HTTP 헤더에 매핑됩니다.
prop
은 키 이름이며 value
값의 문자열 표현입니다.
prop_name: value
값 형식은 유추됩니다. 값을 큰따옴표로 묶는 경우의 결과는 다음과 같습니다.
콘텐츠의 형식이 RFC2616 날짜/시간인 경우 브로커는 콘텐츠를
System.DateTime
으로 처리합니다.그렇지 않으면 브로커는 따옴표를 제거하고 콘텐츠를
System.String
으로 처리합니다.
값을 큰따옴표로 묶지 않는 경우의 결과는 다음과 같습니다.
콘텐츠가 true 또는 false(대/소문자 구분)이면 브로커는 콘텐츠를 해당 값이 포함된
System.Boolean
으로 처리합니다.콘텐츠를 정수로 구문 분석할 수 있는 경우 브로커는 콘텐츠를 System.Int64로 처리합니다.
콘텐츠를 부동 소수점 숫자로 구문 분석할 수 있는 경우 브로커는 콘텐츠를
System.Double
로 처리합니다.그렇지 않으면 브로커는 메시지를 거부합니다.
예를 들면 다음과 같습니다.
product: Windows 7 Ultimate
price: 299.98
order-time: Fri, 04 Mar 2011 08:49:37 GMT
메시지 본문
HTTP 요청/응답 본문 스트림과 BrokerMessage.BodyStream
간에 변환이 수행되지 않습니다. 또한 응용 프로그램이 본문의 바이트를 올바르게 해석할 수 있도록 HTTP 요청의 Content-Type
헤더가 보존되며 메시지 수신자에게 반환됩니다.
사용자 지정 xml 개체 직렬 변환기 없이 SBMP 씩 클라이언트를 사용하여 메시지를 작성하는 경우 콘텐츠 형식은 "application/msbin1"로 기본 지정됩니다. 메시지 작성 후에 응용 프로그램이 명시적으로 변경하는 경우(예: message.ContectType=”application/mytype”
)가 아니면 해당 형식은 DataContractBinarySerializer
입니다. 이 콘텐츠 형식 값이 HTTP 소비자에게 반환됩니다. 그러면 응용 프로그램이 본문의 바이트를 역직렬화하는 방법을 결정합니다.
WCF Service Bus 바인딩은 를 메시지 인코더의 ContentType
로 설정합니다ContentType
. 예를 들어 텍스트 메시지 인코더를 사용하는 경우 Content-Type
은 “application/soap+xml”
이어야 합니다.
메시지 변환
HTTP 메시징 런타임 공급자가 HTTP 요청/응답과 메시지 간의 변환을 수행합니다. 변환 메서드는 이 섹션 앞부분의 표에 나와 있는 헤더/속성 매핑을 포함하고 메시지의 콘텐츠 형식을 보존하도록 확대됩니다.