2011-11-17 131 views
0

這是我的要求。從1個消息格式轉換爲另一種格式

我有一個客戶端使用什麼都網絡協議發送特定消息格式的一些軟件服務提供商(ABC)。

現在這個客戶端切換軟件服務提供商(XYZ),但不希望改變自己的軟件,並希望繼續發送ABC提供的同樣的信息。

  • 提供商ABC使用某種位置基於消息格式通過一些古老的網絡協議
  • 提供商XYZ使用XML在HTTP上(一個或多個)網絡服務不是SOA與XML只是簡單的POST
  • 某些值可以直接映射,而其他必須重新計算或修改。例如將客戶的賬戶號碼從ABC提供商轉換爲XYZ提供商的賬戶號碼。這是爲了請求和迴應。
  • 古老的網絡協議將在網絡級別轉換爲TCPI/IP,因此這不是問題。
  • 客戶期望實時回覆。即:客戶提出請求,XYZ做到永無止境,並回應客戶。

所以我需要建立某種形式的隧道的接受TCP/IP的消息轉換爲XML,將它發送HTTP(S)POST到XYZ,找回XML響應,轉換回位置爲主,通過回信TCPI/IP到客戶端。

這是一個ESB類型的事情,我應該只是寫一些排序JAVA服務器應用程序,將做到這一點?

回答

0

試過騾ESB它的重量很輕。我會說更多,然後是一些競爭。我喜歡它如何不受SOA或肥皂的限制。所以你可以從普通的TCP/IP,HTTP,文件,電子郵件到任何真正有十幾個連接器的任何類型的端點構建,你甚至可以編寫你自己的。我也喜歡這個消息可以是任何東西的事實。我可能是錯的,但即使當其他人聲稱他們有各種連接器和消息格式,他們似乎有一些隱藏在引擎蓋下的SOAP,它似乎喜歡哈哈一些其他人看起來不錯,但有差的文檔。不喜歡這種事實,即某些基本的JDBC功能僅在企業版中可用。 I.e:要從存儲的proc呼叫中獲取輸出參數,您需要企業版。

實際上,我可以選擇任何服務器API,允許我創建一個服務器來接收HTTP,然後編寫我的代碼來轉換消息,打開客戶端連接到下一個服務發送它,接收響應,重新 - 將其轉換回客戶端。同時確保線程和隊列在服務器內正常運行。也許我可以剛剛使用jetty和一個servlet,並在一個請求中完成所有任務。這是一個選項,但是如果我必須切換到TCP/IP,那麼我只需更改一下配置。等待看看客戶說什麼。

ESB基本上是膠水和管道。我所要做的就是編寫三個自定義轉換器類,因爲我處理的消息是專有的銀行業務格式,並且不能完全映射到簡單的XSLT/XML轉換......大約20個XML標記將它們放在一起...

這是所有我需要得到這一點騾(不包括標籤來建立自己的數據源和SQL查詢)的...

<flow name="myFlow"> 
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" /> 
    <object-to-string-transformer /> 
    <custom-transformer class="com.mycom.transformer.MyTransformer" /> 
    <enricher target="#[variable:client]"> 
     <jdbc:outbound-endpoint queryKey="getClientConfig" exchange-pattern="request-response" /> 
    </enricher> 
    <custom-transformer class="com.MyCom.transformer.MyOtherTransformer" /> 
    <http:outbound-endpoint exchange-pattern="request-response" host="xxx.xxx.xxx.xxx" port="80" path="some path" method="POST"/> 
    <custom-transformer class="com.MyCom.transformer.BackToOtherFormat" /> 
</flow> 

所以基本上... 1-接收HTTP(S )與自定義消息 2-解析消息以獲取客戶端號碼 3-在數據庫中查找客戶端號碼以獲取其他服務的客戶端號碼... 4-創建新消息 5發送切換到其他服務 6-變換回響應 7返回到客戶端

0

您有太多選擇。從Python開始,Perl ..有提供TCP/HTTP/telnet/...支持的庫/模塊。使用它你可以做到這一點。

ESB可能是這種矯枉過正,它是大集成一個大框架,但是是的,你可以寫你的BC(綁定組件),並做到這一點。性能我不知道是否ESB會爲一些更原始的像特等/的.py

總之有太多的選擇一樣好。您必須根據您必須部署的環境來接聽電話。

E.g.你說「有些值可以直接映射,而其他值必須重新計算或修改,例如將客戶的帳號從ABC提供商轉換爲XYZ提供商的帳號,這是爲了請求和響應。」,如果ABC-A/c-num與XYZ-A/c-num映射只能通過遠程EJB調用纔可用,那麼您可能需要考慮在J2EE中編寫整個事情。如果「計算」需要一些特定的庫,你必須因素,在還有...

希望這不會讓你的問題變得更糟.. :)

PS:你應該開始接受解答您的以前的問題。正如Home說的那樣。

+0

那麼進一步的細節。我是其他提供者,我的Web服務是一個帶有XML的簡單HTTP POST。客戶端當前正在使用x25和一些銀行信息。因此,x25將被轉換爲TCP/IP,並且它們將連接到我們的網絡併發送該銀行信息。所以我需要某種TCP/IP偵聽應用程序來轉換消息並將其發送到我們的服務。數據轉換隻需簡單查看即可獲取帳戶的新值。 – user432024

0
<flow name="FileTransferFlow1" doc:name="FileTransferFlow1"> 
    <file:inbound-endpoint path="C:\mule_projects\filetransfer\in" responseTimeout="10000" doc:name="IncomingFile"/> 
    <http:outbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" doc:name="HTTP" responseTransformer-refs="Java"/> 
    <custom-transformer class="com.Transformer" doc:name="Java"/> 
    <file:outbound-endpoint path="C:\mule_projects\filetransfer\out" responseTimeout="10000" doc:name="OutgoingFile"/> 
</flow> 

相關問題