我需要公开一些服务供Java客户端远程使用(他们应该使用httpinvoker)和其他语言(他们应该使用REST)。
我可以配置弹簧启动以暴露两者吗? (我不介意是否会使用两个具有不同端口的独立实例,例如this post)。
我放弃了为内部使用REST的Java客户端提供API的想法,因为使用RestTemplate.
手动将所有REST端点连接到代码中相当繁琐
我喜欢HttpInvoker的概念,因为ProxyFactoryBean
被自动使用。如果Spring Remoting能够以某种方式完成此任务,可以为JMS,AMQP和其他人做到这一点。
答案 0 :(得分:3)
在Spring Boot中公开HTTP调用程序端点实际上非常简单,看起来好像缺少某些东西。在路径@SpringBootApplication
的{{1}}中(例如使用spring-webmvc
POM),添加以下bean定义:
spring-boot-starter-web
HTTP调用程序端点现在在@Bean(name = "/my.service")
public HttpInvokerServiceExporter myHttpInvokerServiceExporter(MyService myServiceImpl) {
HttpInvokerServiceExporter exporter = new HttpInvokerServiceExporter();
exporter.setServiceInterface(MyService.class);
exporter.setService(myServiceImpl);
return exporter;
}
公开,不会影响任何其他映射。您可以根据需要添加任意数量的端点;然后在顶部使用一些/my.service
作为REST。
答案 1 :(得分:2)
你可以使用这样的东西。将您的服务作为休息服务公开。然后使用http或其他库使您的Java客户端使用这些服务。如果任何其他方也感兴趣,他们也可以以自己的方式消费它。
否则,你可以创建自己的jar来消耗你的休息服务,让你的java客户端使用它,而不需要了解其他服务。
答案 2 :(得分:2)
我们在这里使用这两种技术。 HttpInvoker for Java-to-Java调用。用于其他客户端的纯JSON over HTTP(类似于REST但不是真正的REST)。我认为项目jsonrpc4j提供了一种实现HTTP内容的好方法。
答案 3 :(得分:2)
看看春天休息的人。它将Java接口绑定到REST服务。这并没有解决“暴露”服务的问题,但却更容易使用它。
答案 4 :(得分:0)
HttpInvoker在spring-integration 2.x之后被删除:http://docs.spring.io/spring-integration/docs/2.0.x/reference/html/httpinvoker.html(!重要的标题提供了详细信息)。在3.x和4.x版本中引用了HTTP支持:http://docs.spring.io/spring-integration/docs/latest-ga/reference/html/http.html
还有另一篇SO帖子,其中有人询问有关HTTP支持和春季启动的信息:Spring Integration Http with Spring Boot and @RequestMapping
希望这能让你走出兔子洞。