#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 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