訊息的內容

Message 物件內容的概觀,以及指向更詳細參照資訊的鏈結。

表 1. 訊息的內容
內容名稱 說明
JMS_IBM_CHARACTER_SET XMS 用戶端將訊息轉遞至其預期目的地時,訊息內文中的字元資料字串所使用的編碼字集 (或字碼頁) ID (CCSID)。 在 XMS中,此內容具有數值並對映至 CCSID。 不過,此內容是以 JMS 內容為基礎,因此具有字串類型值,並對映至代表此數值 CCSID 的 Java 字集。
JMS_IBM_Encoding XMS 用戶端將訊息轉遞至其預期目的地時,訊息內文中的數值資料如何呈現。
JMS_IBM_EXCEPTIONMESSAGE 用來說明訊息傳送至異常目的地的原因的文字。 這是唯讀內容。
JMS_IBM_EXCEPTIONPROBLEMDESTINATION 訊息傳送至異常目的地之前訊息所在目的地的名稱。
JMS_IBM_EXCEPTIONREASON 用來說明訊息傳送至異常目的地的原因的原因碼。
JMS_IBM_EXCEPTIONTIMESTAMP 訊息傳送至異常目的地的時間。
JMS_IBM_FEEDBACK 指出報告訊息本質的代碼。
JMS_IBM_FORMAT 訊息中應用程式資料的本質。
JMS_IBM_LAST_MSG_IN_GROUP 指出訊息是否為訊息群組中的最後一則訊息。
JMS_IBM_MSGTYPE 訊息的類型。
JMS_IBM_PUTAPPLTYPE 傳送訊息的應用程式類型。
JMS_IBM_PUTDATE 傳送訊息的日期。
JMS_IBM_PUTTIME 傳送訊息的時間。
JMS_IBM_REPORT_COA 要求「到達時確認」報告訊息,指定必須將原始訊息中的多少應用程式資料併入到報告訊息中。
JMS_IBM_REPORT_COD 要求「遞送時確認」報告訊息,指定必須將原始訊息中的多少應用程式資料併入到報告訊息中。
JMS_IBM_REPORT_DISCARD_MSG 要求在訊息無法遞送至其預期目的地的情況下捨棄訊息。
JMS_IBM_REPORT_EXCEPTION 要求異常狀況報告訊息,指定必須將原始訊息中的多少應用程式資料併入到報告訊息中。
JMS_IBM_REPORT_EXPIRATION 要求有效期限報告訊息,指定必須將原始訊息中的多少應用程式資料併入到報告訊息中。
JMS_IBM_REPORT_NAN 要求負面動作通知報告訊息。
JMS_IBM_REPORT_PAN 要求正面動作通知報告訊息。
JMS_IBM_REPORT_PASS_CORREL_ID 要求任何報告或回覆訊息的相關性 ID 與原始訊息的相關性 ID 相同。
JMS_IBM_REPORT_PASS_MSG_ID 要求任何報告或回覆訊息的訊息 ID 與原始訊息的訊息 ID 相同。
JMS_IBM_RETAIN 設定此內容會向佇列管理程式指出如何將訊息作為保留的發佈資訊加以處理。
JMS_IBM_SYSTEM_MESSAGEID 在服務整合匯流排中唯一識別訊息的 ID。 這是唯讀內容。
JMSX_APPID 傳送訊息的應用程式名稱。
JMSX_DELIVERY_COUNT 嘗試遞送訊息的次數。
JMSX_GROUPID 訊息所屬的訊息群組的 ID。
JMSX_GROUPSEQ 訊息群組內訊息的序號。
JMSX_USERID 與傳送訊息的應用程式相關聯的使用者 ID。

JMS_IBM_MQMD* 內容

IBM® Message Service Client for .NET 可讓用戶端應用程式使用 API 讀取/寫入 MQMD 欄位。 它也容許存取 MQ 訊息資料。 依預設會停用 MQMD 的存取權,且應用程式必須使用「目的地」內容 XMSC_WMQ_MQMD_WRITE_ENABLED 及 XMSC_WMQ_MQMD_READ_ENABLED 來明確啟用。 這兩個內容彼此獨立。

除了 StrucId 和 Version 之外,所有 MQMD 欄位都公開為其他訊息物件內容,並以 JMS_IBM_MQMD 為字首。

JMS_IBM_MQMD* 內容優先於上表所說明的其他內容 (例如 JMS_IBM*)。

傳送訊息

除了 StrucId 和 Version 之外的所有 MQMD 欄位都已呈現。 這些內容僅參照 MQMD 欄位; 如果內容同時出現在 MQMD 和 MQRFH2 標頭中,則不會設定或擷取 MQRFH2 中的版本。 可以設定任何這些內容,但 JMS_IBM_MQMD_BackoutCount除外。 會忽略為 JMS_IBM_MQMD_BackoutCount 設定的任何值。

如果內容具有長度上限,且您提供的值太長,則會截斷該值。

對於某些內容,您也必須在 Destination 物件上設定 XMSC_WMQ_MQMD_MESSAGE_CONTEXT 內容。 應用程式必須以適當的環境定義權限執行,才能使此內容生效。 如果您未將 XMSC_WMQ_MQMD_MESSAGE_CONTEXT 設為適當的值,則會忽略內容值。 如果您將 XMSC_WMQ_MQMD_MESSAGE_CONTEXT 設為適當的值,但沒有佇列管理程式的足夠環境定義權限,則會發出異常狀況。 需要 XMSC_WMQ_MQMD_MESSAGE_CONTEXT 特定值的內容如下。

下列內容需要將 XMSC_WMQ_MQMD_MESSAGE_CONTEXT 設為 XMSC_WMQ_MDCTX_SET_IDENTITY_CONTEXT 或 XMSC_WMQ_MDCTX_SET_ALL_CONTEXT:
  • JMS_IBM_MQMD_UserIdentifier
  • JMS_IBM_MQMD_AccountingToken
  • JMS_IBM_MQMD_ApplIdentity資料
下列內容需要將 XMSC_WMQ_MQMD_MESSAGE_CONTEXT 設為 XMSC_WMQ_MDCTX_SET_ALL_CONTEXT:
  • JMS_IBM_MQMD_PutAppl類型
  • JMS_IBM_MQMD_PutAppl名稱
  • JMS_IBM_MQMD_PutDate
  • JMS_IBM_MQMD_PutTime
  • JMS_IBM_MQMD_ApplOrigin資料

接收訊息

如果 XMSC_WMQ_MQMD_READ_ENABLED 內容設為 true ,則不論產生端應用程式所設定的實際內容為何,所有這些內容都可以在接收的訊息上使用。 除非先根據 JMS 規格清除所有內容,否則應用程式無法修改所接收訊息的內容。 可以在不修改內容的情況下轉遞接收到的訊息。
附註: 如果您的應用程式從 XMSC_WMQ_MQMD_READ_ENABLED 內容設為 true 的目的地接收訊息,並將它轉遞至 XMSC_WMQ_MQMD_WRITE_ENABLED 設為 true 的目的地,則會導致將所接收訊息的所有 MQMD 欄位值複製到轉遞的訊息。 內容表
表 2. 代表 MQMD 欄位之訊息物件的內容
內容 說明 類型
JMS_IBM_MQMD_REPORT 報告訊息的選項 System.Int32
JMS_IBM_MQMD_MSGTYPE 訊息類型 System.Int32
JMS_IBM_MQMD_EXPIRY 訊息期限 System.Int32
JMS_IBM_MQMD_FEEDBACK 回饋碼或原因碼 System.Int32
JMS_IBM_MQMD_ENCODING 訊息資料的數字編碼 System.Int32
JMS_IBM_MQMD_CODEDCHARSETID 訊息資料的字集 ID System.Int32
JMS_IBM_MQMD_FORMAT 訊息資料的格式名稱 System.String
JMS_IBM_MQMD_PRIORITY
附註: 如果您將值指派給不在 0-9 範圍內的 JMS_IBM_MQMD_PRIORITY ,則此值會違反 JMS 規格。
訊息優先順序 System.Int32
JMS_IBM_MQMD_PERSISTENCE 訊息持續性 System.Int32
JMS_IBM_MQMD_MSGID
附註: JMS 規格指出訊息 ID 必須由 JMS 提供者設定,且必須是唯一或空值。 如果您指派值給 JMS_IBM_MQMD_MSGID ,此值會複製到 JMSMessageID。 因此,它不是由 JMS 提供者所設定,且可能不是唯一的: 此值違反 JMS 規格。
訊息 ID 位元組陣列
附註: 在訊息上使用位元組陣列內容違反 JMS 規格。
JMS_IBM_MQMD_CORRELID
附註: 如果您指派值給以字串 'ID:' 開頭的 JMS_IBM_MQMD_CORRELID ,此值會違反 JMS 規格。
相關性 ID 位元組陣列
附註: 在訊息上使用位元組陣列內容違反 JMS 規格。
JMS_IBM_MQMD_BACKOUTCOUNT 取消計數器 System.Int32
JMS_IBM_MQMD_REPLYTOQ 回覆佇列的名稱 System.String
JMS_IBM_MQMD_REPLYTOQMGR 回覆佇列管理程式的名稱 System.String
JMS_IBM_MQMD_USERIDENTIFIER 使用者 ID System.String
JMS_IBM_MQMD_ACCOUNTINGtoken 帳戶記號 位元組陣列
附註: 在訊息上使用位元組陣列內容違反 JMS 規格。
JMS_IBM_MQMD_APPLIDENTITYDATA 與身分相關的應用程式資料 System.String
JMS_IBM_MQMD_PUTAPPLTYPE 放置訊息的應用程式類型 System.Int32
JMS_IBM_MQMD_PUTAPPLNAME 放置訊息的應用程式名稱 System.String
JMS_IBM_MQMD_PUTDATE 放置訊息的日期 System.String
JMS_IBM_MQMD_PUTTIME 放置訊息的時間 System.String
JMS_IBM_MQMD_APPLORIGINDATA 與出處相關的應用程式資料 System.String
JMS_IBM_MQMD_GROUPID 群組 ID 位元組陣列
附註: 在訊息上使用位元組陣列內容違反 JMS 規格。
JMS_IBM_MQMD_MSGSEQNUMBER 群組內本端訊息的序號 System.Int32
JMS_IBM_MQMD_OFFSET 從邏輯訊息開始的實體訊息中的資料偏移 System.Int32
JMS_IBM_MQMD_MSGFLAGS 訊息旗標 System.Int32
JMS_IBM_MQMD_ORIGINALLENGTH 原始訊息的長度 System.Int32

如需進一步詳細資料,請參閱 MQMD

範例

此範例會導致將訊息放入具有 MQMD.UserIdentifier 設為 "JoeBloggs"。


  // Create a ConnectionFactory, connection, session, producer, message
  // ...

  // Create a destination
  // ...

  // Enable MQMD write
  dest.setBooleanProperty(XMSC_WMQ_MQMD_WRITE_ENABLED, 
		XMSC_WMQ_MQMD_WRITE_ENABLED_YES);
  
  // Optionally, set a message context if applicable for this MD field
  dest.setIntProperty(XMSC_WMQ_MQMD_MESSAGE_CONTEXT, 
    XMSC_WMQ_MDCTX_SET_IDENTITY_CONTEXT);

  // On the message, set property to provide custom UserId
  msg.setStringProperty(JMS_IBM_MQMD_USERIDENTIFIER, "JoeBloggs");

  // Send the message
  // ...

在設定 JMS_IBM_MQMD_USERIDENTIFIER 之前,必須先設定 XMSC_WMQ_MQMD_MESSAGE_CONTEXT。 如需使用 XMSC_WMQ_MQMD_MESSAGE_CONTEXT 的相關資訊,請參閱訊息物件內容。

同樣地,您可以在接收訊息之前將 XMSC_WMQ_MQMD_READ_ENABLED 設為 true ,然後使用訊息的 get 方法 (例如 getStringProperty) ,來解壓縮 MQMD 欄位的內容。 任何收到的內容都是唯讀的。

此範例會導致值欄位保留 MQMD.ApplIdentityData 欄位。


  // Create a ConnectionFactory, connection, session, consumer
  // ...

  // Create a destination
  // ...

  // Enable MQMD read
  dest.setBooleanProperty(XMSC_WMQ_MQMD_READ_ENABLED, XMSC_WMQ_MQMD_READ_ENABLED_YES);

  // Receive a message
  // ...

  // Get required MQMD field value using a property
  System.String value = rcvMsg.getStringProperty(JMS_IBM_MQMD_APPLIDENTITYDATA);