在APPLTAG下的IBM MQ v8.0知識中心頁面「DISPLAY CONN」中,它顯示了MQ如何確定值。你沒有說明什麼操作系統客戶端應用程序正在運行上,用於Unix和Windows的信息是:
- UNIX進程
注意
在HP-UX,如果進程名超過14個字符,只顯示前14個字符。在所有其他平臺上,如果進程名稱超過28個字符,則只顯示前28個字符。
- Windows進程
注意
這包括完整的程序路徑和可執行文件名。如果超過28個字符,則只顯示最後的28個字符。
如前所述通過@Attila Repasi您可以在每個消息的MQMD改變APPLNAME使用設置所有上下文,這並不影響在MQ資源管理器中顯示的「應用程序名稱」。
一個解決辦法我想如果你在Unix上運行的是創建單獨的符號鏈接到你的程序,每個符號鏈接都有不同的名稱。如果使用不同的符號鏈接名稱運行每個副本,則這應該反映爲MQ Explorer顯示的「應用程序名稱」。
我在Linux上測試的第二項工作是在不需要符號鏈接的情況下工作,即在程序中設置進程名稱。我第一次嘗試寫入argv[0]
,但我發現這改變了ps
輸出中的進程名稱,但它不會更改MQ顯示的APPLTAG
值。我在Linux中找到的工作方式如下,這必須在MQCONN
之前調用。
char *process_name = "samplename\0";
prctl(PR_SET_NAME,process_name,NULL,NULL,NULL);
@ Fusspawn的回答爲 「How to name a thread in Linux? [duplicate]」 幫助上述語法。
請注意,在Unix操作系統MQI客戶端上進行測試時我發現在Linux和Solaris上進程名稱被OS限制爲15個字符。僅在AIX上,RAPPLTAG才能顯示完整的28個字符。 Windows MQI客戶端也能夠顯示完整的28個字符。 IBM知識中心僅指出HP-UX限制爲14個字符,但表示在其他Unix平臺上限制爲28個字符,這對於Linux和Solaris限制爲15個字符的情況似乎不正確。
有用的答案:
在人們誰可能是提供信息的利益使用適用於Java API的IBM MQ類,知識中心中的「DISPLAY CONN」頁面不會注意到適用於Java API客戶端的IBM MQ類可以使用這個值。這在IBM MQ知識中心頁面「Setting up the IBM MQ environment for IBM MQ classes for Java」中標記爲通過設置應用程序名稱來識別與隊列管理器的連接。這是自v7.5以來纔可用的。
應用程序名稱被限制爲28個字符,而較長的名稱被截斷以適合。如果未指定應用程序名稱,則會提供默認值。默認名稱基於調用(main)類,但如果此信息不可用,則使用文本WebSphere MQ Client for Java。
...
要在傳遞給MQQueueManager構造函數的屬性哈希表中設置應用程序名稱,請使用鍵名將該名稱添加到屬性哈希表中。MQConstants.APPNAME_PROPERTY。
IBM MQ類JMS API客戶端也可以設置這個值。這在IBM MQ知識中心頁面「Properties of IBM MQ classes for JMS objects > APPLICATIONNAME」中註明。這是自v7.5以來纔可用的。
適用對象
連接工廠,的QueueConnectionFactory,TopicConnectionFactory的, XAConnectionFactory,XAQueueConnectionFactory, XATopicConnectionFactory
JMS管理工具長的名字:APPLICATIONNAME
JMS管理工具簡稱:APPNAME
編程訪問
塞特斯/吸氣劑
- MQConnectionFactory.setAppName()
- MQConnectionFactory.getAppName()
值
任何有效的字符串,它是不再是n 28個字符。如有必要,更長的名稱 可通過刪除主要的軟件包名稱進行調整。例如,如果調用類爲com.example.MainApp,則使用完整的 名稱,但如果調用類爲 com.example.dictionaryAndThesaurus.multilingual.mainApp,則會使用名稱 multilingual.mainApp,因爲它是 類別名稱和最右邊的包名稱中最長的組合,它適合可用的 長度。
如果類名本身長度超過28個字符,則會將其截斷爲 。例如, com.example.mainApplicationForSecondTestCase變爲 mainApplicationForSecondTest。
你沒有提到你的客戶端應用程序在哪個操作系統上運行,但是我添加了另一個用於Linux的工作來設置程序中的進程名稱,我發現了一些類似的Windows和Solaris的答案,如果你使用的是不同的操作系統,也可以爲你工作。 – JoshMc