IBM Message Broker筆記系列(七)

這篇是針對WebService的一些使用技巧

入門

MBWebService的支持其實不是它的強項,它的長處在於MQMB就是基於MQ的,所謂“消息代理”,感覺就是在消息中間件基礎上增加了“代理”功能。MB的前身是MQ Integrator,所以從字面意思上來看,也是“message -> integrator -> broker”,越來越複雜的功能。據說,Websphere ESB對於javawebservice的支持更加完善,不過我也沒有用過。

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

扯了那麼多,回到主題。在MB V6.0中,對WebService的支持還是比較弱的,以單純的http節點,加上程序員在compute節點中手工操作消息樹,包括對SOAP包進行封包(envelop)和解包(extract)都要自力更生,難度比較大,且不夠直觀簡練,給人感覺是MBwebservice支持不夠,不得已而爲之。到了V6.1,情況終於有了較大的改觀,MB提供專門的webservice節點了。

 

所以,如果你還在看《精通WMB》,那麼webservice那一章可以先放下了,去WMBT的“樣本庫”,看看webservice的教程,會發現不僅僅有專門的SOAP節點,還對IBMWSRR也有專門的支持,甚至還提供異步的SOAP節點。因此在MB中使用webservice,第一步推薦先去學這些樣例。特別留意使用httpsoap節點時,前後的compute節點的ESQL代碼的差異,體會SOAP節點的方便。

樣本庫

 

技巧

 

看完SOAP節點的樣例之後,會發現裏面的那個子流,其實也挺複雜的,好像不比http節點簡單

 

http節點

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

 

http節點子流

SOAP節點

SOAP節點

其實,EnvelopeExtract節點是MB6.1纔有的,沒有他們,http節點構造webservcie會變得很囉嗦;另外,以上的流程圖,是可以通過嚮導的方式生成的,這一點非常方便。

 

首先在消息集項目中,“從WSDL文件”新建一個消息定義;然後將這個WSDL文件拖到某個消息流的編輯界面中,自動彈出一個嚮導,簡單地一步步走,就能生成以上的消息流。

 

消息定義基於WSDL

 

WSDL嚮導

 

動態設置webservice地址

 

在以上生成的消息流中,HTTP節點和SOAP節點都有一個屬性,用於指定webservice的請求地址,但這是寫死在節點中的。如果要在運行過程中動態設置呢?比如根據消息內容,選擇合適的URL地址進行webservice調用。

 

其實很簡單,只需在SOAPHTTP節點之前的某個compute節點中,在LocalEnvironment中設置一個相應的值即可

  • HTTP節點:

SET OutputLocalEnvironment.Destination.HTTP.RequestURL = ‘webservice地址

  • SOAP節點:

set OutputLocalEnvironment.Destination.SOAP.Request.Transport.HTTP.WebServiceURL = ‘webservice地址

 

注意,切記把compute節點的“計算方式”設置爲“消息和LocalEnvironment”,總之至少要包括LocalEnvironment,否則設置了等於沒設置,compute節點不會將LocalEnvironment往下傳

 

當然,以上步驟也可以在FilterDatabase這些節點做,那樣就沒有InputOutputLocalEnvironment之分了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章