20220507 2. Integration - Remoting and Web Services

前言

文档地址

Spring 支持使用各种技术进行远程处理。远程处理支持简化了远程支持服务的开发,这些服务通过 Java 接口和对象作为输入和输出来实现。目前,Spring 支持以下远程处理技术:

  • Java Web Services : Spring 通过 JAX-WS 为 Web 服务提供远程处理支持
  • AMQP : 单独的 Spring AMQP 项目支持通过 AMQP 进行远程处理作为底层协议

从 Spring Framework 5.3 开始,由于安全原因和更广泛的行业支持,对多种远程处理技术的支持现在已经不再推荐。在 Spring 框架的下一个主要版本中,支持性的基础设施将被移除。

以下远程处理技术现在已不推荐使用,不会被替换:

  • Remote Method Invocation (RMI) : 通过使用 RmiProxyFactoryBean 和 rsiveviceexporter,Spring 支持传统的 RMI (使用 java.rmi.Remote 接口和 java.rmi.RemoteException ) 和通过 RMI 调用器 (使用任何 Java 接口) 进行透明远程处理
  • Spring HTTP Invoker (Deprecated) : Spring 提供了一种特殊的远程处理策略,允许通过 HTTP 进行 Java 序列化,并支持任何 Java 接口 (就像 RMI 调用器那样) 。相应的支持类是 HttpInvokerProxyFactoryBeanHttpInvokerServiceExporter
  • Hessian : 通过使用 Spring 的 HessianProxyFactoryBeanHessianServiceExporter ,您可以通过 Caucho 提供的基于 http 的轻量级二进制协议透明地公开您的服务
  • JMS (Deprecated) : spring-jms 模块中的 JmsInvokerServiceExporterJmsInvokerProxyFactoryBean 类支持通过 JMS 进行远程处理,作为底层协议

AMQP

Spring Remoting with AMQP 将在 Spring AMQP 项目 3.0 版本中被删除

参见 Spring Remoting

选择技术时的考虑

这里介绍的每一种技术都有其缺点。在选择技术时,您应该仔细考虑自己的需求、公开的服务以及通过网络发送的对象。

在使用 RMI 时,您不能通过 HTTP 协议访问对象,除非您对 RMI 通信进行隧道化。RMI 是一个相当重量级的协议,因为它支持全对象序列化,当您使用需要通过连接进行序列化的复杂数据模型时,这一点非常重要。然而,RMI-JRMP 与 Java 客户机绑定在一起。它是一个 Java 到 Java 的远程处理解决方案。

如果您需要基于 HTTP 的远程处理,但又依赖于 Java 序列化,Spring 的 HTTP 调用程序是一个很好的选择。它与 RMI 调用器共享基本的基础设施,但使用 HTTP 作为传输。请注意,HTTP 调用器不仅限于 Java 到 Java 远程处理,还限于客户端和服务器端的 Spring 。(后者也适用于非 RMI 接口的 Spring 的 RMI 调用程序)

在异构环境中操作时,Hessian 可能提供重要的价值,因为它们显式地允许非 Java 客户机。然而,非 Java 支持仍然是有限的。已知的问题包括 Hibernate 对象的序列化以及以延迟方式初始化的集合。如果您有这样的数据模型,可以考虑使用 RMI 或 HTTP 调用器而不是 Hessian 。

JMS 可以用于提供服务集群,并让 JMS 代理负责负载平衡、发现和自动故障转移。默认情况下,Java 序列化用于 JMS 远程处理,但是 JMS 提供者可以使用不同的连接格式化机制,比如 XStream ,以便在其他技术中实现服务器。

最后但并非最不重要的一点是,EJB 比 RMI 有优势,因为它支持标准的基于角色的身份验证和授权以及远程事务传播。也可以让 RMI 调用器或 HTTP 调用器支持安全上下文传播,尽管核心 Spring 没有提供这种支持。Spring 只为插入第三方或自定义解决方案提供适当的挂钩。

Java Web Services

提供了对标准 Java Web Services API 的全面支持:

  • 使用 JAX-WS 公开 web 服务
  • 使用 JAX-WS 访问 web 服务

除了 Spring Core 中对 JAX-WS 的支持外,Spring 还提供了 Spring Web Services ,这是一种契约优先、文档驱动的 Web 服务解决方案,强烈推荐用于构建现代的、面向未来的 Web 服务。

其他略

RMI (Deprecated)

从 Spring Framework 5.3 开始,RMI 支持就已经过时,不会被取代。

使用 Hessian 通过 HTTP 远程调用服务 (Deprecated)

从 Spring Framework 5.3开始,Hessian 支持就已经过时,不会被取代。

Spring HTTP Invoker (Deprecated)

从 Spring Framework 5.3开始,HTTP Invoker 支持就已经过时,不会被取代。

JMS (Deprecated)

从 Spring Framework 5.3开始, JMS 远程处理就已经过时,不会被取代。

posted @ 2022-06-09 21:29  流星<。)#)))≦  阅读(93)  评论(0编辑  收藏  举报