如何模拟真正的运行应用程序?



我的一个微服务 [MS1] 在启动时检查另一个微服务 [MS2],MS2 是否正在运行。如果 MS2 正在运行,则 MS1 将启动,否则无法启动。

但是目前我在本地机器上运行MS2,这需要大量的RAM并且会减慢我的机器速度。

是否有任何机制使当 MS1 启动并查找 MS2 时,似乎 MS2 正在运行而没有实际运行真正的 MS2?


更新:

假设 MS2 在localhost:1234上运行,现在 MS1 将使用 REST 连接到它。

你可以看看WireMock它是HTTP API的模拟器,所以它适合本地开发。使用它时,您将能够模拟微服务,就好像它在给定主机和端口上作为独立微服务运行一样。

您可以将其作为独立进程运行,也可以作为 Spring 应用程序的一部分运行。

选项 1 - 配置独立 wiremock 服务器:

  1. 下载 Wiremock 独立罐
  2. 在具有端口1234的本地主机上运行独立服务器:
java -jar wiremock-standalone-2.24.0.jar --port 1234
  1. 将 MS1 微服务配置为使用localhost:1234作为 MS2 主机。
  2. 模拟你的 MS2(用 wiremock 模拟)端点,并给出一些响应:
curl -X POST --data '{ "request": { "url": "/yourendpoint", "method": "GET" }, "response": { "status": 200, "body": "Response" }}' http://localhost:1234/__admin/mappings/new

在这里,我们模拟当您使用 HTTP GET 在/yourendpoint上点击模拟服务器时,您将收到文本Response作为响应。

  1. 现在,当您按 GET 打开localhost:1234/yourendpoint时,您会得到模拟的响应:
curl http://localhost:1234/yourendpoint
Response

完整示例可在Wiremock Standalone docs


选项 2 - 在 Spring 应用程序中配置 WireMock 服务器:

  1. WireMock dependency添加到项目中(请注意,不仅要将其添加到测试范围)
  2. 创建一个用于设置服务器的 Spring bean:
@Component
public class CustomMicroserviceMock {
private WireMockServer wireMockServer;
public CustomMicroserviceMock() {
wireMockServer = new WireMockServer(options().port(1234));
wireMockServer.stubFor(get(urlEqualTo("/yourendpoint"))
.willReturn(aResponse()
.withHeader("Content-Type", "text/plain")
.withBody("Response")));
wireMockServer.start();
}

@PreDestroy
void preDestroy() {
wireMockServer.stop();
}
}
  1. 当我们点击localhost:1234/yourendpoint时,我们得到响应:Response

这只是一个POC的外观,但它在两种情况下都有效。

我建议在本地机器中使用WireMock作为独立服务,或者如果你 熟悉Docker可以查看Wiremock Docker镜像:

https://hub.docker.com/r/rodolpheche/wiremock/

我正在将其用于我的开发和测试,它确实是一个强大的存根解决方案:)

祝你好运

相关内容

最新更新