由于R2DBC是反应式和非阻塞的,我想了解在简单的RESTful CRUD服务中使用R2DBC的好处
假设Spring Boot应用程序正在使用下面的存储库公开RESTful服务
public interface CustomerRepository extends ReactiveCrudRepository<Customer, Long> {
@Query("SELECT * FROM customer WHERE last_name = :lastname")
Flux<Customer> findByLastName(String lastName);
}
从服务调用此存储库,结果需要在服务中进行转换,然后才能返回控制器。
Flux<Customer> customers = repository.findAll();
为了访问完整的客户列表,我需要在通量上调用blockLast()
,这使得它阻塞并违背了使用反应组件的目的
这是否意味着在这个简单的示例中使用R2DBC没有任何好处?我错过什么了吗?
如果通量集合的处理发生在不同的线程中,那么通量只能用于异步订阅吗?
Flux
,它返回一个可以在未来某个时候完成的promise。. block Last()
,您将使调用线程阻塞。正如Michael在这个答案中所说,只有在您将反应式和非反应式代码集成在一起时才应该这样做。CompletableFuture
等)。希望这能消除您的疑虑;如图所示,如果执行。blockLast()
,您失去了真正的非阻塞。理想情况下,调用线程应该立即释放,以便可以执行其他工作。
“通量只能用于异步订阅,其中通量集合的处理发生在不同的线程中吗?”-通量只不过是一个promise,它可以在未来的某个时间完成。如图所示,回调将在异步线程上执行。计算完成。您可以使用. PublishOn()
切换此线程。
为了访问完整的客户列表,我需要在Flux上调用blockLast(),这使得它阻塞并违背了使用反应组件的目的
如果要实际获取对列表的引用,只需调用blockLast()
如果您只想一次访问完整的客户列表,您可以明智地调用collectList()
以获得一个
这里唯一要注意的是内存占用-如果您只是处理Flux
这是否是一个问题取决于您的用例。如果你说的是10个左右的客户,那没问题。如果你说的是数十亿美元,那么这可能不是一个明智的解决方案。
我有一个下面的对象列表,方法返回被动类型
我用一个由 它的工作罚款与 但是如果我试着在后台用 我明白了 正在启动开发服务器。。。 事件。js:174投掷者;//未处理的“错误”事件^ 错误:EBADF:坏的文件描述符,读取发射'错误'事件在:在lazyFs.read(内部/fs/streams.js:165: 12)在FSReqWrap.wrapper[作为一个完整的](fs.js:467: 17)npm ERR!代码ELIFECYCLE
问题内容: 我正在设计一个简单的聊天应用程序(仅此而已)。我一直想知道该聊天应用程序的简单设计。为了给您概述..这是规则: 匿名用户仅使用昵称输入聊天。(用户ID)大概是由系统在后台分配的。 他们可以加入(订阅)聊天对话。并且他将看到来自其他用户的聊天文本出现在指定区域。 他们可以回复特定的对话,其他所有人都应该看到。 而已!(请参阅我告诉您的那是一个简单的聊天应用程序)。因此,我的意图并不是真正
我面临的问题是,有一个服务,我必须调用,这是一个传统的Spring启动应用程序,而不是反应性的! 下面是一个示例endpoint,它接近上述遗留系统的想法: 我知道我不能用这个来实现真正的反应性善,有没有一个快乐的非阻塞和阻塞的媒介我可以在这里实现? 谢谢
我希望从spring reactive WebClient进行SOAP调用。我找不到任何文件。想知道会有什么方法。现在我在想 null 缺点和其他方法是什么?
问题内容: 我将用Java进行RESTful调用。但是,我不知道如何拨打电话。我是否需要使用URLConnection或其他?谁能帮我。谢谢。 问题答案: 如果从服务提供商(例如Facebook,Twitter)调用RESTful服务,则可以选择以下任意一种方式: 如果您不想使用外部库,则可以使用或(对于SSL),但这是封装在中的Factory类型模式中的调用java.net.URLConnect