You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RavenDB v5.4:集成测试中全局配置读取前等待索引完成

全局配置查询等待非 stale 结果的方案

针对你在集成测试环境遇到的问题,当前版本的RavenDB确实支持通过IDocumentStore的全局配置,让所有查询默认等待索引更新完成,无需逐个查询添加WaitForNonStaleResults。具体实现方式如下:

1. 初始化DocumentStore时设置全局查询策略

在创建并初始化DocumentStore的阶段,通过配置Conventions.Querying下的相关参数,统一设置查询的一致性要求:

using (var store = new DocumentStore
{
    Urls = new[] { "http://localhost:8080" },
    Database = "YourTestDatabase"
})
{
    // 全局强制查询等待非 stale 结果
    store.Conventions.Querying.DefaultQueryingConsistency = QueryingConsistency.WaitForNonStaleResults;
    
    // 可选:自定义默认等待超时时间
    store.Conventions.Querying.DefaultWaitForNonStaleResultsTimeout = TimeSpan.FromSeconds(5);

    store.Initialize();
}

2. 针对测试环境的按需配置

如果只需要在集成测试环境启用该规则,建议通过环境变量或配置开关控制,避免影响生产环境:

var isTestEnv = bool.Parse(Environment.GetEnvironmentVariable("INTEGRATION_TEST_ENV") ?? "false");

using (var store = new DocumentStore
{
    Urls = new[] { "http://localhost:8080" },
    Database = "TestDatabase"
})
{
    if (isTestEnv)
    {
        store.Conventions.Querying.DefaultQueryingConsistency = QueryingConsistency.WaitForNonStaleResults;
        store.Conventions.Querying.DefaultWaitForNonStaleResultsTimeout = TimeSpan.FromSeconds(5);
    }

    store.Initialize();
}

补充说明

  • QueryingConsistency.WaitForNonStaleResults会让所有session.Query()发起的查询自动等待索引更新到最新状态,效果等同于给每个查询手动添加.Customize(x => x.WaitForNonStaleResults())
  • session.Load()方法不受该配置影响,因为它直接从文档存储读取数据,不依赖索引
  • 默认超时时间可通过DefaultWaitForNonStaleResultsTimeout自定义,未设置时将使用RavenDB内部默认值(通常为15秒)

内容的提问来源于stack exchange,提问作者LLL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 11:02:06