Реактивные потоки Micronaut: скорость выбросов не поддерживается

#micronaut #reactor #micronaut-rest

#micronaut #реактор #micronaut-отдых

Вопрос:

Я пытаюсь протестировать потоковую передачу потока с задержкой 1000 миллис для каждого элемента.

 @Get(value = "/carts/reactive", produces = MediaType.APPLICATION_JSON_STREAM)
public Flux<Cart> getCartsReactive() {
     return Flux.range(1, 10)
            .map(integer -> Cart.builder().name("cart"   integer).build())
            .delayElements(Duration.ofMillis(1000))
            .doOnNext(cart -> log.info("Returning Flux of cart: "  cart));
}
 

Когда я захожу в службу, я не получаю ответа в течение 10 секунд и получаю ответный блог.

 curl http://localhost:7070/carts/reactive

{"name":"cart1"}{"name":"cart2"}{"name":"cart3"}{"name":"cart4"}{"name":"cart5"}{"name":"cart6"}{"name":"cart7"}{"name":"cart8"}{"name":"cart9"}{"name":"cart10"}
 

Это ошибка? Почему он не выбрасывает 1 корзину каждую секунду?

Ответ №1:

В вашем коде, который вы написали, нет ничего плохого — вот полный проект с использованием micronaut reactor с точно таким кодом в контроллере:

https://github.com/berry120/micronaut-reactive-demo

Он производит элементы по одному, как и ожидалось, с задержкой в одну секунду:

Micronaut gif

Вы можете сравнить этот проект со своим собственным, чтобы увидеть, какую конфигурацию / код вы можете пропустить, что мешает ему работать должным образом. Я вообще не делал ничего особенного с вышеупомянутым проектом — он был создан исключительно на основе Micronaut initializr с включенным дополнением reactor.

Обратите внимание, что вы должны настроить модуль micronaut-reactor ( implementation("io.micronaut.reactor:micronaut-reactor") ), а не просто включать reactor в качестве зависимости от третьей стороны, в противном случае это может вызвать проблемы.

Комментарии:

1. Спасибо за ответ. Я скачал проект GitHub и попробовал разные вещи. Я могу сделать вывод, что уровень выбросов сохраняется только на Windows. В Mac скорость эмиссии не поддерживается, и все json отправляются в виде большого двоичного объекта. Можете ли вы попробовать, что это машина с Linux / Mac? Я думаю, что это серьезная ошибка.

2. @AnoopHallimala Это действительно удивительно — да, я попробую свой Mac и дам вам знать.

3. @AnoopHallimala Похоже, вы правы — я вижу такое же поведение на моем Mac. Я бы создал ошибку в команде micronaut, связал их с этим репозиторием Github и упомянул о различном поведении, которое вы видите (в Windows и Mac.), Они должны быть в состоянии либо подтвердить это как проблему, либо указать вам, что не так.

4. Спасибо, Майкл. Создана проблема с Github github.com/micronaut-projects/micronaut-core/issues/5102