"Transport",是WSO2 ESB中一種很有用的功能,不同的transport類型,用來接收、傳送各種的訊息(message)。
目前,WSO2 ESB底層中的WSO2 Carbon,支援底下種類的transport: | |||
HTTP | HTTPS | ||
HTTP-NIO | HTTPS-NIO | ||
JMS | |||
VFS | TCP | ||
Local | UDP | ||
FIX |
利用這些transport,搭配各種Transfrom mediators,就能將不同協定、標準、格式的應用程式,所傳來的各種訊息進行轉換、轉傳,達到ESB的功能。
範例參考網址:http://wso2.org/library/tutorials/2011/01/sftp-file-transer-wso2-esb
這個範例演示了一個簡單的動作,利用VSFTP,將一個XML檔從一個目錄取回ESB,再由ESB寫到另一個目錄。
版本及平台:
1、版本及平台,同“將WSO2 ESB 4.0.2佈署到JBoss 5.1GA"中的“範例環境及代號說明”
2、SFTP登入帳號/密碼:ftpuser / wso2
3、in, out, original目錄所在位置:/home/ftpuser/vsftp/
遭遇問題及注意事項:
1、 雖然在Apache Commons上,
http://commons.apache.org/vfs/filesystems.html
有寫道SFTP的VFS語法為
sftp://[ username[: password]@] hostname[: port][ absolute-path]
不過, 真正在測試時,似乎是“相對路徑”,而非“絕對路徑”。
所以,後來將範例內容改為:
<proxy xmlns="http://ws.apache.org/ns/synapse" name="SFTPVFSProxy" transports="vfs" statistics="disable" trace="enable" startOnLoad="true"> |
可以注意到,在sftp的hostname後面,並非
/home/ftpuser/vsftp/in
/home/ftpuser/vsftp/out
/home/ftpuser/vsftp/original
而是,
/vsftp/in
/vsftp/out
/vsftp/original
另外,FileURI只給目錄位置,而沒有連同檔名一併標入,即
<parameter
name="transport.vfs.FileURI">vfs:sftp://ftpuser:wso2@192.168.10.1/vsftp/in
</parameter>
而非
<parameter
name="transport.vfs.FileURI">vfs:sftp://ftpuser:wso2@192.168.10.1/vsftp/in/test.xml
</parameter>
否則,ESB會將/vsftp/in/test.xml檔成一個目錄,如下錯誤:
2、有可能SFTP服務沒有安裝,要取得vsftpd-xxx.rpm進行安裝。
3、在Server上的vsftpd服務,在/etc/vsftpd/vsftpd.conf中,要啟用寫入功能,所以要設定
write_enable=YES
補充說明:
文章中也有提到。VFS transport的SFTP,為了確保不會同時有多個transport listener處理檔案。因此,處理前,為要進行處理的檔案建立一個.lock檔,
等處理結束時,再將該.lock檔刪除掉。