是否可以使用 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" 服务的问题,但使它更容易使用。
我需要公开一些服务供 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" 服务的问题,但使它更容易使用。