2.2.5 FinalAck Packet
The FinalAck Packet contains a stand-alone transactional acknowledgment message that is sent to the original sender in one of two situations: either when a transactional message is rejected by the receiver; or when an accepted transactional message with a UserHeader.Flags.JN or a UserHeader.Flags.JP field set to 0x1 is removed from the destination queue.
The packet can represent a positive or negative acknowledgment. The MessageClass field of the contained MessagePropertiesHeader ([MS-MQMQ] section 2.2.19.3) packet defines the type of acknowledgment. The FinalAck Packet is an end-to-end acknowledgment.
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
3 |
|
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BaseHeader (16 bytes) |
|||||||||||||||||||||||||||||||
... |
|||||||||||||||||||||||||||||||
... |
|||||||||||||||||||||||||||||||
UserHeader (variable) |
|||||||||||||||||||||||||||||||
... |
|||||||||||||||||||||||||||||||
MessagePropertiesHeader (variable) |
|||||||||||||||||||||||||||||||
... |
BaseHeader (16 bytes): A BaseHeader ([MS-MQMQ] section 2.2.19.1). The BaseHeader.Flags field MUST have all bits set to 0.
UserHeader (variable): A UserHeader ([MS-MQMQ] section 2.2.19.2). The Flags.MP flag MUST be set to 0x1 to indicate that a MessagePropertiesHeader is included. The Flags.DM flag MUST be set to 0x1 to request recoverable messaging. All other bits MUST be set to 0 except Flags.DQ, which MUST be set either to 0x3 or to 0x7. If Flags.DQ is 0x3, the DestinationQueue field MUST be a PrivateQueueFormatNameId ([MS-MQMQ] section 2.2.18.1.5.1) with PrivateQueueIdentifier set to 0x00000004. If Flags.DQ is 0x7, the DestinationQueue field MUST be a DirectQueueFormatName ([MS-MQMQ] section 2.2.18.1.5.2) with DirectFormatName set to a string in the format specified by the following ABNF rules.
-
-
orderQueueName = ("TCP:" ip-address / "SPX:" ipx-address ) "\PRIVATE$\order_queue$" ip-address=(IPv6address / IPv4address) ipx-address= 8HEXDIG "." 12HEXDIG ; network.node HEXDIG = Digit | "A" | "B" | "C" | "D" | "E" | "F" Digit = %x30-39
-
-
The use of TCP or SPX depends on whether TCP or SPX transport is supported.<18> The value for IPv4address [RFC3986], IPv6address [RFC3986], or ipx-address MUST represent the IP or IPX address of the queue manager to receive the message.
MessagePropertiesHeader (variable): A MessagePropertiesHeader. The Label field MUST be set to "QM Ordering Ack". The MessageSize field MUST be set to 0x00000024. The Flags field MUST have all bits set to 0.
-
For a positive acknowledgment, the MessageClass field MUST be set to MQMSG_CLASS_ACK_RECEIVE. For a negative acknowledgment, the MessageClass field MUST be set to one of the following message class identifiers:
MQMSG_CLASS_NACK_NOT_TRANSACTIONAL_Q
MQMSG_CLASS_NACK_BAD_DST_Q
MQMSG_CLASS_NACK_ACCESS_DENIED
MQMSG_CLASS_NACK_BAD_ENCRYPTION
MQMSG_CLASS_NACK_UNSUPPORTED_CRYPTO_PROVIDER
MQMSG_CLASS_NACK_BAD_SIGNATURE
MQMSG_CLASS_NACK_Q_EXCEED_QUOTA
MQMSG_CLASS_NACK_Q_DELETED
MQMSG_CLASS_NACK_Q_PURGED
MQMSG_CLASS_NACK_RECEIVE_TIMEOUT
-
For more details on message class identifiers, see [MS-MQMQ] section 2.2.18.1.6.
-
The BodyType field MUST be set to the value VT_EMPTY ([MS-MQMQ] section 2.2.12). The MessageBody field MUST be in the FinalAck Body (section 2.2.5.1) format.