Controller.java
import cn.jdw.silky.retrofit.SilkyWebFluxClient;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
import java.io.IOException;
@RestController
@RequiredArgsConstructor
public class ConsumeController {
private final SilkyWebFluxClient silkyWebFluxClient;
@GetMapping("/producer/sleep/{seconds}")
Mono sleep(@PathVariable("seconds") int seconds) throws IOException {
return silkyWebFluxClient.port(seconds);
}
}
ApplicationTest.java
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.web.reactive.server.WebTestClient;
import org.springframework.web.reactive.function.client.WebClient;
import java.net.URI;
import java.util.stream.IntStream;
/**
* @author ListJiang
*/
@ActiveProfiles("native")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SquareWebServerTest {
@Autowired
private WebTestClient webClient;
@Test
void contextLoads() {
IntStream.range(1, 20).parallel().forEach(i -> {
var result = webClient.get().uri("/producer/sleep/3")
.accept(MediaType.APPLICATION_JSON)
.exchange()
.expectStatus().isOk()
.expectBody(String.class).returnResult().getResponseBody();
System.out.println(result);
});
}
}