是否可以使用 REST 和 httpInvoker 在 spring 引导中远程公开一个 bean

Is it possible to remotely expose a bean in spring boot using REST and httpInvoker

我需要公开一些服务供 Java 客户端(他们应该使用 httpinvoker)和其他语言(他们应该使用 REST)远程使用。

我可以配置 spring 引导来公开两者吗? (我不介意是否会使用两个具有不同端口的单独实例,例如 this post)。

我放弃了为 内部 使用 REST 的 Java 客户端提供 API 的想法,因为将所有 REST 端点连接到其中相当乏味使用 RestTemplate. 手动输入代码 我喜欢 HttpInvoker 的概念,因为 ProxyFactoryBean 会自动使用。如果 Spring Remoting 能够以 JMS、AMQP 和其他人可以做到的方式做到这一点,我会采用这种方式。

你可以使用这样的东西。将您的服务公开为休息服务。然后让您的 java 客户使用 http 或其他一些库来使用这些服务。如果任何其他方也有兴趣,他们也可以以自己的方式使用它。

否则,您可以创建自己的 jar 来使用您的休息服务,让您的 java 客户使用它,而无需了解休息服务。

HttpInvoker 在 spring-集成 2.x 后被删除:http://docs.spring.io/spring-integration/docs/2.0.x/reference/html/httpinvoker.html (!Important header gives details). There is a reference to HTTP Support in 3.x and 4.x versions: http://docs.spring.io/spring-integration/docs/latest-ga/reference/html/http.html

还有另一个 SO post 有人询问 HTTP 支持和 spring 引导并提供一些相关信息:

希望这能让你走出困境。

我们在这里使用这两种技术。用于 Java 到 Java 调用的 HttpInvoker。其他客户端通过 HTTP 的普通旧 JSON(类似于 REST 但不是真正的 REST)。我认为项目 jsonrpc4j 提供了一种实现 HTTP 内容的好方法。

在 Spring 引导中公开 HTTP 调用程序端点实际上非常简单,看起来好像缺少了什么。在其路径上具有 spring-webmvc@SpringBootApplication 中(例如使用 spring-boot-starter-web POM),添加以下 bean 定义:

@Bean(name = "/my.service")
public HttpInvokerServiceExporter myHttpInvokerServiceExporter(MyService myServiceImpl) {
    HttpInvokerServiceExporter exporter = new HttpInvokerServiceExporter();
    exporter.setServiceInterface(MyService.class);
    exporter.setService(myServiceImpl);
    return exporter;
}

HTTP 调用程序端点现在公开在 /my.service 并且不会影响任何其他映射。您可以根据需要添加任意数量的此类端点;然后是顶部的一些 @RequestMapping 用于 REST。

看看 spring-rest-invoker。它将 Java 接口绑定到 REST 服务。这并没有解决 "exposing" 服务的问题,但使它更容易使用。

https://github.com/ggeorgovassilis/spring-rest-invoker