我的公司使用Go来构建一些HTTP API服务。我们希望这些服务共享一个HTTP端口。
所以现在解决方案是我们创建一个名为router的项目,路由器导入一些模块,每个请求都通过路由器传递给自己的模块。
但问题是,如果其中一个模块处理崩溃,路由器就会崩溃。
有没有解决方案?
需要:
我知道go-kit并且去微观,我也尝试过,但仍然不太了解。
答案 0 :(得分:0)
Go-kit和go-micro用于编写微服务,它无法解决您的问题。
您应该在应用程序前使用反向代理,例如Nginx:https://www.nginx.com/resources/admin-guide/reverse-proxy/
以下是执行所需操作的nginx配置文件的示例:
import matplotlib.pyplot as plt
plt.show()
这样,您仍然可以在不同的端口上部署应用程序,但它们只会通过端口80公开。
答案 1 :(得分:0)
您正在寻找的是API网关。 API网关也是一种反向代理形式。我已经研究过像Tyk,Traefik和Zuul这样的完整解决方案,它们都是很好的解决方案。当然可以使用Nginx,但是你可能有很多必须使用Lua脚本进行合并,例如OpenID-Connect / OAuth的客户端用于授权等。另外需要考虑的是安全性,日志记录,指标,速率限制,(动态路由)等。我真的不会将我的API网关建立在Nginx上。 Nginx-Plus包含一个API网关,但需要付款。
我目前正在开展一个非常大的项目,并发现它需要以上述解决方案的插件形式进行大量的自定义工作。事实上,从头开始编写我的API网关(使用Golang和库)会更容易。
既然你提到你已经尝试过go-kit和micro,我建议你尝试使用Traefik,因为它设置起来非常简单,并且为方便起见包含了一个Web UI。
答案 2 :(得分:0)
我用来在Windows中托管Go微服务的方法只是运行go install <main-package-file>
,它为Windows生成了一个exe文件。然后我只是用SC来创建一个Windows服务。然后将其作为普通的Windows服务运行。这样我就不需要Nginx或任何这样的引擎..