Java 我可以代理嵌入WAR中的Golang服务器吗?
我的一个客户对如何部署web应用程序有非常严格的要求。他们要求它能够作为WAR部署在像Tomcat这样的Java服务器中。然而,我们的应用程序是用golang编写的,并编译成一个可执行服务器 我能想到的唯一解决方案是在后台启动一个长期存在的golang进程,它监听一个非标准端口,如Java 我可以代理嵌入WAR中的Golang服务器吗?,java,tomcat,go,proxy,Java,Tomcat,Go,Proxy,我的一个客户对如何部署web应用程序有非常严格的要求。他们要求它能够作为WAR部署在像Tomcat这样的Java服务器中。然而,我们的应用程序是用golang编写的,并编译成一个可执行服务器 我能想到的唯一解决方案是在后台启动一个长期存在的golang进程,它监听一个非标准端口,如8080,然后在java中放置某种代理,它将透明地代理所有HTTP请求和对该进程的响应 我应该如何实现它呢?我对Java servlet和在后台运行这样的长时间运行的流程一点也不熟悉 我主要关心的是,如果像这样的东西是
8080
,然后在java中放置某种代理,它将透明地代理所有HTTP请求和对该进程的响应
我应该如何实现它呢?我对Java servlet和在后台运行这样的长时间运行的流程一点也不熟悉
我主要关心的是,如果像这样的东西是标准的
也许有更好的方法吗?类似于某种进程间通信机制吗?如果您的Go应用程序只公开HTTP API,那么您只剩下发送HTTP Go请求的选项了。是的,您可以使用
ProcessBuilder
从JVM启动Go可执行文件作为子进程。但这并不是真正的战争。您可以使用JNI(调用Go绑定)从Java调用Go中的本机例程,但是您还必须对Go代码库进行大量调整
您可能正在寻找的实际上是一个反向代理。这在servlet/应用服务器中并不常见,因为这通常已经在负载平衡器中完成了。所以通常是NGINX或httpd加上mod\u rewrite
。对于应用服务器,可以使用代理servlet
示例:
听起来你会有麻烦的。如果我的严格要求是可以部署到应用服务器的WAR归档文件,我不会接受添加到堆栈中的另一个可执行文件。是否反向代理。如果他们想要战争,就给他们战争 编写一个薄层web服务,该服务将可执行文件嵌入为资源,执行该资源以启动go服务器、接受web调用并传递到go服务 我什么也没听到你说?嗯,他们的武断要求可能是由一个早已离开公司的人提出的,而且/或者是因为他们缺乏信心/经验/知识来处理其他形式的部署。没有特别好的理由拒绝部署您的服务,除了建立适当操作程序所需的工作(惰性) 只要遵循他们的规则的文字,而不是精神,如果被问及你的执行情况,要诚实。他们不会介意的
这听起来可能像是在咆哮,但根据我的经验,这种方法是现实的,需求的驱动因素是基于情感的,因此有必要给出一个有点情绪化的答案。在微服务环境中,谁会关心一个服务在Go中编写,另一个在Node中编写,另一个可能使用Dropwizard。无论如何,这些服务都很小,如果周围没有熟悉该语言或框架的人,它们很容易被替换。但是,如果您有一个J2ee堆栈、运行它的ops和维护它的开发人员,那么您就不会侥幸成功,除非您有很好的理由(并在前面讨论过)。假设这些员工早就离开了,甚至已经死了,也不会让你走得很远。不满足严格要求将意味着没有报酬或法庭。