在 Spring WebFlux 反应式处理程序中发送 JMS 消息:是否阻塞?

jzq*_*zqa 6 spring reactive-programming spring-webflux

这是反应式处理的正确方法吗?我看到 2 个线程一个反应式 nio,直到并包括flatMap(fareRepo::save). 另一个线程是计算线程,它从发送消息开始一直持续到 ServerResponse.build()。我的问题是这种响应式处理请求的正确方法吗?注意:fareRepo 是反应式 couchbase 存储库。谢谢

return request.bodyToMono(Fare.class).flatMap(fareRepo::save).flatMap(fs -> {
            logger.info("sending message: {}, to queue", fs.getId());
            jmsTemplate.send("fare-request-queue", (session) -> session.createTextMessage(fs.getId()));
            return Mono.just(fs);
        }).flatMap(fi -> ServerResponse.created(URI.create("/fare/" + fi.getId())).build());
Run Code Online (Sandbox Code Playgroud)

Bri*_*zel 4

我假设您正在使用 Spring Framework 的JmsTemplate实现,它是阻塞的。

如果没有更多上下文,我们只能假设您在反应式运算符中间有一个阻塞操作,这将导致您的应用程序出现问题。