Gir*_*ane 1 spring web-services
嗨,我想在远程应用程序服务器上实现一个Web服务,该服务器将对数据库执行写入操作.在另一个应用程序服务器上运行的另一个应用程序将使用那些公开的Web服务.我该怎么做呢?我正在阅读Spring文档,并且有关于使用合同优先Web服务和使用MessageDispatcherServlet的讨论.然后在另一个名为"远程处理"的部分中,我读到了通过HTTP进行通信的Hessian和Burlap.
有很多选择,我应该选择哪一个?
小智 8
答案,就像许多事情一样,取决于.
如果您的客户端和服务器都只是Java,并且不会是其他任何东西,并且您能够同时为客户端和服务器部署新版本的jar(例如,您可以重新启动客户端)和服务器每当发生java类的更改时),然后考虑Spring的RPC"远程处理"支持.远程支持基本上通过获取对象的接口并从另一台机器与其交互来工作.它与该接口紧密耦合.但是,这种方法具有使用方便的优点,并且需要很少的现有POJO并将其作为服务导出.另外,RPC机制往往不依赖于HTTP协议,所以如果你对速度很认真并且你觉得你甚至不能在你的调用中在线上进行hTTP交换,那么考虑其中一个"远程处理". "选项.Spring核心支持RMI,HTTP-Invoker,Burlap和Hessian.我已经为许多其他使用更多当代RPC技术的出口商实施了支持,如Thrift,MessagePack,JBoss Remoting和Avro.所有这些技术都提供了自己的"序列化"技术,而这种技术又有其自身的优点和缺点,就像RMI,Hessian和Burlap一样.
总而言之,"远程"支持可能不是最安全的选项,因为客户端和服务器紧密耦合:如果更改服务器上使用的java类,则需要更改客户端上使用的Java类.
相反,更喜欢像REST这样的"面向文档"的方法,或者Spring的契约优先Web服务.在这些技术中,最小的Web服务有两个步骤:用相关的返回类型和对象定义Java服务,然后根据HTTP端点和您准备在这些端点处理的相关文档定义接口.例如,通过REST发送的"文档"可以是XML文档,也可以是JSON文档,也可以是多种编码类型中的任何一种.重点是它们是使用HTTP传输的,并且必须有机器(如Spring MVC)来接收这些文档并将它们转换为对您的应用程序有意义的对象.以这种方式做事的好处是你可以改进实际的java服务,而那些使用HTTP端点而不是Java接口的客户端并不是更明智的.
Spring MVC 3中的REST支持非常强大且易于入门.Spring使用名为HttpMessageConverter的SPI接口将来自JSON或XML的HTTP请求转换为可在代码中与之对接的Java对象,并将代码中的对象转换为可作为HTTP响应发送的文档.如果你在类路径上有Jackson JSON库,Spring MVC会自动注册一个HttpMessageConverter,如果你的类路径上有JAXB,它会注册JAXB支持.例如,使用JAXB肯定不属于这个问题的范围,但你可以很容易地查找它.Spring将根据HTTP请求的"Accept"标头的类型自动响应HTTP请求.如果指定"Accept = application/xml",那么它将寻找适当注册的HttpMessageConverter将结果转换为XML.它对其他"Accept"标头值也是如此.
RESTful Web服务或基于SOAP的契约优先当然受基础HTTP交换速度的影响.此外,SOAP或REST XML文档甚至JSOn文档可能会膨胀,并且在整个线路中效率低下.因此,您可以实现更高效的HttpMessageConverters.我提供了一个HttpMessageConverter,它允许您使用Avro,Thrift,Snappy(压缩库),Google Protocol Buffers和MessagePack进行RESTful交换.当然,现在,即使使用这些,您仍然需要遵循HTTP固有的延迟,但至少有效载荷本身可以尽可能高效.消息转换器实际上是对有效载荷进行序列化或编码的不同方式.您只需使用其中一个而不是JSON或XML.例如,请参考该包中的测试.好的,入门示例请查看Spring MVC展示
| 归档时间: |
|
| 查看次数: |
1799 次 |
| 最近记录: |