首页 > 解决方案 > 在 Firestore Java admin SDK 中网络断开和重新连接时未收到文档更新

问题描述

我正在使用 Java 管理 SDK 在本地 PC 的 Firestore 中设置一个查询手表。如果网络断开并重新连接,则我的本地计算机不再接收更新。我观察到,如果网络重新连接发生在很短的时间间隔内(< 2 - 3 分钟),那就没问题了。但是,如果它更长,则会发生此问题。此外,侦听器回调中不会通知错误/异常,因此我可以再次设置监视以进行更新。我的电脑不在代理后面,所以它不可能是代理问题。

请帮助我调试此问题。

编辑:

看起来这是 SDK 中的错误。我启用了 SDK 日志并尝试了以下实验:

标签: javafirebasegoogle-cloud-firestore

解决方案


必须启用 GRPC keepalive,客户端才能将 keepalive 发送到服务器并检测任何从服务器端关闭的连接。这可以通过TransportChannelProviderFirestoreOptions初始化时提供FirebaseApp。代码片段如下:

InstantiatingGrpcChannelProvider channelProvider =
    InstantiatingGrpcChannelProvider.newBuilder()
        .setKeepAliveTime(Duration.ofSeconds(60L))
        .setKeepAliveTimeout(Duration.ofMinutes(5L))
        .build();

FirestoreOptions firestoreOptions = FirestoreOptions.newBuilder()
    .setChannelProvider(channelProvider).build();

FirebaseOptions options = new FirebaseOptions.Builder()
    .setCredentials(credentials).setFirestoreOptions(firestoreOptions)
    .setConnectTimeout(5000).setReadTimeout(5000).build();
FirebaseApp firebaseApp = FirebaseApp.initializeApp(options);

Firestore firestore = FirestoreClient.getFirestore(firebaseApp);

推荐阅读