我正在学习微服务架构,但现在有些混乱。
golang
写的4个项目
HTTP
请求)orderService
,userService
,web
通过grpc
进行沟通web
转发至orderService
或userService
orderService
和userService
拥有自己的独立数据库docker
容器当我想测试请求时,我必须执行以下步骤:
cd orderService
govender update +vendor
go build
cd userService
govender update +vendor
go build
cd web
govender update +vendor
go build
docker-compose build
docker-compose up
当我更改了一些代码时,我必须再次执行此步骤 我认为这是不科学和不正常的。我想知道是否所有这些步骤都是在docker中集成测试四个微服务所必需的。
答案 0 :(得分:3)
如果您更改Go代码,则必须重新编译;这不是异常的。 Go代码快速编译,这通常不是什么大问题。
我不确定你为什么要反复运行govendor。如果您正在处理依赖关系,则暂时更容易展开它。
为了加快速度,请不要在开发过程中使用Docker;至少不是Go代码。由于Go本身没有任何依赖性,因此这样做没有任何优势。您仍然可以在Docker中运行支持服务(例如数据库),但您不必一直重建并重新启动它。
答案 1 :(得分:1)
您没有解释您想要做什么样的测试。你这样做的方式似乎是你在运行带有数据库的实例,所以我把它当作集成测试。
我认为你在做这个之前已经写了单元测试。
如果您希望独立测试,我建议您使用http://onsi.github.io/ginkgo/
这将帮助您测试大多数api和业务场景,并单独测试orderService和userService的流程。
答案 2 :(得分:1)
首先,除非依赖性发生变化,否则我认为不必重复去供应商。它不应该经常发生。
其次,Golang确实要求您构建/编译,因此如果您进行更改,则必须重新构建服务。但是,大多数情况下,您应该只对一项服务进行更改,以使您的生活更轻松。它将使开发期间的测试和调试更容易。
最后,有几种方法可以加快使用docker进行开发的速度。我建议继续使用docker,因为它会使你的devops生活更轻松,尽管你不必这样做。为简单起见,您可以将构建步骤移动到Docker容器。你要做的是将包含依赖项的目录复制到容器中并在容器内部构建(或者只在容器内部go run
)。这对于开发来说是可以的。如果您希望有一组容器定义用于开发和部署,您可以编写一个脚本来编译每个服务,将二进制文件复制到一个目录中,并让docker从该目录复制二进制文件。几行python脚本就足够了。这具有使用docker-compose的额外好处,您只需单击即可立即使用整个服务。然后,您还可以使用另一个docker容器编写集成测试启动程序,该容器将运行您的测试一次并退出。