真相之路蠻曲折的! 至少第一次探索從Egg問起的"Queue-Group"與System Admin Guide裏語焉不詳的暗示多個Background的可能性, 演變到從頭反思Method Sever與Background Server的定義與目的... 幾乎是要發掘真相. 可惜忽略了一個重要線索, 追到後來還是失敗了. 儘管如此, 我覺得這個探詢的過程蠻有趣的, 或許也能延伸出一些討論. 所以把他記在另一篇"有關"只能有一個Background Server"的疑點".
直到去年準備PDMLink9.0 System Admin的教育訓練時, 順便研讀Advanced Deployment Guide. 那時才發現, 此文件裏居然對多個Background Servers的設定有詳細的解釋 (韋爵爺: ㄉ...ㄉ償所望..). 細讀之後. 更覺得其中的設定方法及可能也適用之前的版本. 因此以PDMLink8做測試, 終於證實多個Background Server是可能的.
進入此主題之前請先參閱設定多個Method Server的相關文件或是參考"有關"只能有一個Background Server"的疑點"也可.
Advanced Deployment Guide中有關設定多個Background Servers的介紹節錄如下:
首先是有關啟動Background Server的命令設定, 也就是上次探尋的終點. 簡單來說, 能針對個別Background Server設定啟動命令, 就能夠指定該Background Server負責的Queues. 如此就有機會避開重複執行Queue中工作的問題. 這次文件交代得很清楚: 每個Background Server須要有個自己的名字(Service Name), 啟動指令就是利用這個名字來定義. 格式為: "wt.manager.cmd.(service name)
wt.manager.cmd.
上述的(Method server's Java command)
以名為"BackgroundMethodServer_0"的Background server為例, 設定如下:
wt.manager.cmd.BackgroundMethodServer_0=$(wt.manager.cmd.MethodServer) wt.method.serviceName\=BackgroundMethodServer_0 wt.queue.executeQueues\=true wt.queue.queueGroup\=default wt.adapter.enabled\=false wt.method.minPort\=3000
看來很完美? 故事還沒完!
試想, 系統怎麼知道有兩個Background Server分別叫作"BackgroundMethodServer_0" 與" BackgroundMethodServer_1"? "wt.manager.monitor.start.BackgroundMethodServer=2" 僅僅讓系統知道需要啟動兩個Background Servers, 並沒有透露其他訊息. 從Advanced deployment guide 中的範例發現 他的"wt.manager.monitor.services"是這麼設的:
wt.manager.monitor.services=MethodServer BackgroundMethodServer_0 BackgroundMethodServer_1
原來如此, "MethodServer", "BackgroundMethodServer_0", "BackgroundMethodServer_1"都是"(service name)
以下是我在PDMLink 8上進行測試時的一些畫面:
wt.properties新增的設定
以下為開機後的畫面: 除了Method sever正常啟動外, 真的跑出兩個Background servers.
BackgroundMethodServer_0: Listening port: 3000
建立一個新的Queue名為"david_01", 隸屬於 "david"這個 queue-group. 另外寫了個小程式塞了個工作進去, 每隔十分鐘會印出"Hello!". 如上面的設定, 所有"david"群組的Queues都是由BackgroundMethodServer_1管的. 果然過一會 "Hello" 出現在這.
再拉一個簡單的流程, 用來證明他會被 "BackgroundMethodServer_0"處理
嘿... 真的耶!
上午在和Esther討論MethodServer與Background Server的觀念時 突然想到: "wt.manager.monitor.start.MethodServer" 這個用來指定method server 數量的property, 會不會也是一個"有彈性"的設計? 會不會它其實是"wt.manager.monitor.start.ServiceName"的特例? 而這ServiceName須符合"wt.manager.monitor.services"裏頭定義的某一個"service name"? 如"wt.manager.monitor.services=ServiceName1, ServiceName2,..."? 例如原始設定為:
回覆刪除"wt.manager.monitor.services=MethodServer"
"wt.manager.monitor.start.MethodServer=1"
這兩個properties裏的"MethodServer"會不會只是個Service Name?
如果如此, 我其實應該把wt.manager.monitor.start.BackgroundMethodServer=2"undefine"掉 或清成"0". 改用
"wt.manager.monitor.start.BackgroundMethodServer_0=1" 與
"wt.manager.monitor.start.BackgroundMethodServer_1=1" 才真正符合背後的原則?