我的一个微服务 [MS1
] 在启动时检查另一个微服务 [MS2
],MS2 是否正在运行。如果 MS2 正在运行,则 MS1 将启动,否则无法启动。
但是目前我在本地机器上运行MS2
,这需要大量的RAM
并且会减慢我的机器速度。
是否有任何机制使当 MS1 启动并查找 MS2 时,似乎 MS2 正在运行而没有实际运行真正的 MS2?
更新:
假设 MS2 在localhost:1234
上运行,现在 MS1 将使用 REST 连接到它。
你可以看看WireMock
它是HTTP API的模拟器,所以它适合本地开发。使用它时,您将能够模拟微服务,就好像它在给定主机和端口上作为独立微服务运行一样。
您可以将其作为独立进程运行,也可以作为 Spring 应用程序的一部分运行。
选项 1 - 配置独立 wiremock 服务器:
- 下载 Wiremock 独立罐 子
- 在具有端口
1234
的本地主机上运行独立服务器:
java -jar wiremock-standalone-2.24.0.jar --port 1234
- 将 MS1 微服务配置为使用
localhost:1234
作为 MS2 主机。 - 模拟你的 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
作为响应。
- 现在,当您按 GET 打开
localhost:1234/yourendpoint
时,您会得到模拟的响应:
curl http://localhost:1234/yourendpoint
Response
完整示例可在Wiremock Standalone docs
选项 2 - 在 Spring 应用程序中配置 WireMock 服务器:
- 将
WireMock dependency
添加到项目中(请注意,不仅要将其添加到测试范围) - 创建一个用于设置服务器的 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();
}
}
- 当我们点击
localhost:1234/yourendpoint
时,我们得到响应:Response
这只是一个POC的外观,但它在两种情况下都有效。
我建议在本地机器中使用WireMock作为独立服务,或者如果你 熟悉Docker可以查看Wiremock Docker镜像:
https://hub.docker.com/r/rodolpheche/wiremock/
我正在将其用于我的开发和测试,它确实是一个强大的存根解决方案:)
祝你好运