也在这里分享:https://github.com/tomakehurst/wiremock/issues/625
我正在编写集成测试来验证与REST API交互的应用程序是否正确处理了不成功的请求.为此,我想模拟GET请求两次到HTTP端点的场景.第一次,请求不成功,响应状态代码为500; 第二次,请求成功,响应状态代码为200.请考虑以下示例:
@Rule
public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().dynamicPort()
.dynamicHttpsPort());
@Test
public void testRetryScenario(){
// First StubMapping
stubFor(get(urlEqualTo("/my/resource"))
.withHeader("Accept", equalTo("text/xml"))
.willReturn(aResponse()
.withStatus(500) // request unsuccessful with status code 500
.withHeader("Content-Type", "text/xml")
.withBody("<response>Some content</response>")));
// Second StubMapping
stubFor(get(urlEqualTo("/my/resource"))
.withHeader("Accept", equalTo("text/xml"))
.willReturn(aResponse()
.withStatus(200) // request successful with status code 200
.withHeader("Content-Type", "text/xml")
.withBody("<response>Some content</response>")));
//Method under test that makes calls to endpoint
doSomething();
Thread.sleep(5000);
//Verify GET request was made again after first attempt
verify(exactly(2), getRequestedFor(urlEqualTo("/my/resource")));
}
Run Code Online (Sandbox Code Playgroud)
有没有办法避免第二个StubMapping覆盖第一个 …
鉴于以下同步kafka生产者
Properties props = new Properties();
props.put("max.block.ms", 30000);
props.put("request.timeout.ms", 30000);
props.put("retries", 5);
KafkaProducer<String, byte[]> produce = new KafkaProducer<>(props);
//Send message
producer.send(producerRecord).get();
Run Code Online (Sandbox Code Playgroud)
帮助我理解request.timeout.ms和max.block.ms生产者配置之间的区别.是否包括所有重试的最长时间?或者每次重试都有自己的超时?
主线程/调用线程等待其他线程完成任务的最佳方式是什么?我想出了两个选择;可能还有更多。
选项 1 - Thread.sleep()
new Thread(() -> System.out.println("Executed task 1")).start();
new Thread(() -> System.out.println("Executed task 2")).start();
Thread.sleep(1000);
Run Code Online (Sandbox Code Playgroud)
选项 2 - 闩锁
CountDownLatch latch = new CountDownLatch(2);
new Thread(() -> {
System.out.println("Executed task 1");
latch.countDown();
}).start();
new Thread(() -> {
System.out.println("Executed task 2");
latch.countDown();
}).start();
latch.await(1, TimeUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)
选项 3 - CompletableFuture
CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> System.out.println("Executed task 1"));
CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> System.out.println("Executed task 2"));
CompletableFuture.allOf(future1, future2).join();
Run Code Online (Sandbox Code Playgroud)
选项 4 - ??