Micronaut Reactive

Reactive types, HTTP clients, and non-blocking patterns.

ngxtm a6db832 2 files · 1.6 KB Updated

File contents

Micronaut Reactive Standards

Reactive Controllers

@Controller("/users")
public class UserController {

    @Get("/{id}")
    public Mono<User> findById(Long id) {
        return userService.findById(id);
    }

    @Get(produces = MediaType.TEXT_EVENT_STREAM)
    public Flux<User> stream() {
        return userService.streamAll();
    }
}

Declarative HTTP Client

@Client("order-service")
public interface OrderClient {

    @Get("/orders/{userId}")
    Flux<Order> getOrders(Long userId);

    @Post("/orders")
    Mono<Order> createOrder(@Body CreateOrderRequest request);
}

Low-Level Client

@Singleton
public class ExternalApiService {

    private final HttpClient httpClient;

    public ExternalApiService(@Client("https://api.external.com") HttpClient httpClient) {
        this.httpClient = httpClient;
    }

    public Mono<ExternalData> fetchData(String id) {
        return Mono.from(httpClient.retrieve(
            HttpRequest.GET("/data/" + id),
            ExternalData.class
        ));
    }
}

References

  • HTTP Client Patterns - Retry, fallback, timeout

ngxtm/devkit/tree/main/rules/java/micronaut-reactive commit a6db832678

Frequently asked questions

npx skillmds@latest add ngxtm-devkit/micronaut-reactive