从1个消息格式转换为另一种格式
这是我的要求。从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服务器应用程序,将做到这一点?
试过骡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返回到客户端
您有太多选择。从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说的那样。
如果你需要去使用ESB,您可以尝试WSO2 ESB [1],有各种样品[2],你可以尝试开箱。 WSO2 ESB支持各种类型的消息转换,协议切换等等。
[1] http://wso2.org/library/esb [2] http://wso2.org/project/esb/java/4.0.0/docs/samples_index.html
也看着骡子:D – user432024
<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>
那么进一步的细节。我是其他提供者,我的Web服务是一个带有XML的简单HTTP POST。客户端当前正在使用x25和一些银行信息。因此,x25将被转换为TCP/IP,并且它们将连接到我们的网络并发送该银行信息。所以我需要某种TCP/IP侦听应用程序来转换消息并将其发送到我们的服务。数据转换只需简单查看即可获取帐户的新值。 – user432024