【问题标题】:Could java.io.RandomAccessFile.readBytes blocking calls be acceptable in reactive application? In which cases?java.io.RandomAccessFile.readBytes 阻塞调用在反应式应用程序中是否可以接受?在哪些情况下?
【发布时间】:2021-11-26 17:54:18
【问题描述】:

我们有一个使用 Spring WebFlux 的应用程序,它使用 Project Reactor。我为应用程序运行了 BlockHound 评估,它报告了 java.io.RandomAccessFile.readBytes 在诸如 hibernate-validator、orika 映射器之类的库中阻塞调用。 hibernate-validator 从其 ValidationMessages.properties 文件中读取错误消息。 这个阻塞调用(只是从属性文件中读取消息)对响应式应用程序的负面影响有多严重?是否可以忽略它,或者我们是否应该为此验证找到非阻塞解决方案?

【问题讨论】:

  • 测量。我非常怀疑它是否会产生影响,因为文件将在第一次之后被缓存。
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: java spring-webflux project-reactor reactor blockhound


【解决方案1】:

不幸的是,这里没有快速的答案 - 这取决于您必须查看每个库中 RandomAccessFile.readByte() 的使用情况,并确定它是否可以接受。

一般:

  • 如果它只是在启动时使用 - 没问题,因为这将在任何适当的事件循环之外发生;
  • 如果它可能在事件循环中的某个时刻发生,那么这绝对是您需要解决的问题。

如果hibernate-validator 真的只是使用它来读取属性文件,那么这很可能属于第一类,因此不是问题。但是,我会对此保持谨慎,因为将属性文件作为RandomAccessFile 加载似乎有点奇怪,它们通常是按顺序读取的 - 所以我至少会仔细检查以确保它是真的正在发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 2018-10-12
    • 2011-05-31
    相关资源
    最近更新 更多