我正在研究一种基于微服务的体系结构,我想知道我应该如何在我开发它的本地机器上调试一个微服务(我的IDE附在它上)。
直到今天,我才为整个web平台提供了几个微服务(~4-7),为了调试单个平台,我只需要启动所有非托管的微服务,并在要调试的微服务中设置断点。
然而,我的平台变得更加复杂。现在,我已经对所有的微服务进行了文档化,我已经使用ELK堆栈进行集中日志记录,它通过File节拍( Elastic编写的工具,它基本上将Docker输出传输到Logstash)、Prometheus + Grafana、zipkin (性能监视)、通过RabbitMQ传输等等。正如您所看到的,我需要运行几个码头容器来调试整个平台。
当新的微服务依赖于其他服务时,如何处理它们的开发?当这些服务依赖于其他服务时,您希望使用附加的IDE进行调试?
发布于 2018-09-02 17:29:16
这就是我对你所描述的复杂的设置所做的。
每当您编写微服务时,都要将该微服务的客户端写到同一个接口上。集成测试客户端的服务并记录流量。
现在编写一个模拟的客户端,它不是调用服务来获得响应,而是加载充满了先前记录的流量的文件。
现在,您的下一个具有第一个依赖项的微服务可以在其测试中使用模拟客户端而不是真正的依赖项。
通过使用记录的数据,您可以从实际服务中快速生成新的响应,以适应您的测试用例。甚至在您发现生产中的错误时,也可以使用记录的响应。
现在,您可以在IDE中编写新的测试用例并调试服务,而不必设置所有依赖的服务。
发布于 2018-09-02 16:19:32
如果您的微服务设计正确,则每个服务都满足一个业务功能,这是由一组用户故事和接受标准描述的。这些用户故事和接受标准必须在服务级别上进行测试。因此,创建涵盖所有服务故事并模拟其他服务的测试。这应该足以开发和调试单个服务。
如果您认为这种方法是无效的,可能因为每个服务都需要许多其他服务来执行有意义的事情,那么您应该考虑您的服务是否太小或者拆分得不正确。您可能必须应用此方法,但不要运行单个服务,而是运行2或3,但永远不要运行整个系统或许多服务。在我看来,这很可能意味着一个糟糕的设计。
https://softwareengineering.stackexchange.com/questions/374175
复制相似问题