在敘述問題前,先感謝Calista, Rich, Sandra, Ls 等人的協助,希望下次有機會能再到你們公司拜訪囉^^
有個 webMethods 的朋友,前幾天問我一個 Filepolling 的問題,說實在的,雖然我 Filepolling 已經用了一段時間,但還沒有遇到跟他類似的需求,所以我想了一下,想出了一個爛的解決方法,不過此方法卻沒有解決他的問題,我先把他的需求簡單的描述一下。
“……在所 Filepolling 的 Folder ,要他以一筆一筆的方式來處理該檔案,此檔案是,當該檔案還沒有處理完畢時,不能處理下一筆檔案,但 webMethods 是 Multiple Thread 的方式,雖然他可以依順序來處理檔案,但若第一筆的資料比較多,第二筆的資料比較少的時候,有可能發生第二筆處理完畢後,第一筆才處理完,但我希望的是第一筆處理完,再處理第二筆……”
雖然我沒遇到這個 Case ,不過我想這應該不難吧,弄一個 Q DB 就可以搞定這一個 Case 才是,所以我就決定下面的做法:
流程序述:
1. 產生的檔案的檔名請依時間命名
2. Fillpolling 取得到檔案時,將檔名存放於DB中,內容暫不處理
3. 每三十秒執行一次Schedule Seriver, 此Service是去Q DB取得第一筆Record,此記錄應該為最舊尚未處理的檔案,當處理完畢後,將此Record刪除,所排定的Schedule請勾選Repeat from end of invocation 選項,可避免後來先處理的情形。
過沒多久對方跟我說,並沒有解決他們目前的問題, “……因為在這一個Case 裡,我們除了要讓 wM 依照順序丟出 Data 給 ERP 後端程式外,還希望控制到等ERP 後端程式處理完後再丟出 Data 給 ERP ……” 。顯然地,我的解決方法並沒有未他們解決這一個問題,不過他們卻跟我說有一個設定可以解決這一個問題, “……後來我們發現 wM 的 FilePooing 的機制設定中,有個 Maximum Number of Invocation Threads 這個設定 (設定為1)可以解除我們目前遇到問題……”。
我後來查了一下文件,這一個設定是可以允許你這一個 Filepolling 一次可以有多少個 Threads ,他的範圍從 1 ~ 10 ,因為我平常都不做這一個設定,所以也沒去注意到,而他的 Default 是 10 ,所以當你不去做設定時,他就是以 Multiple Threads 的方式來處理。
後記~~我想解決問題的方法,應該是先找有沒有相關的文件或案例,若找不到相關的資料再進行天馬行空會比較好,免得臭大了。
沒有留言:
張貼留言