正如Jens D评论的那样,您可以尝试locator-wait-time
GemFire (System) 属性。但是,正如文档指出的那样......
如果在尝试加入分布式系统时定位器不可用,则成员应等待定位器启动的秒数。当您同时启动定位器和对等点时使用此设置。此超时允许对等方在尝试加入分布式系统之前等待定位器完成启动。
这特别是指加入分布式系统/集群的“对等成员”,因此可能对客户端(缓存)没有任何影响。
在这种情况下,我使用了其他使用 Spring 的技术(特别是在涉及客户端/服务器拓扑的集成测试中),以使客户端阻塞等待服务器(或定位器)可用。在我的测试中,测试分叉了一个单独的 GemFire JVM 进程来运行服务器,而测试 VM 充当缓存客户端。
通过将 GemFire 与Spring Session集成,您可以在我最近的开发工作中看到这方面的示例,特别是在httpsession-gemfire-clientserver示例中。
在这里,我使用了一个BeanPostProcessor
导致客户端缓存,特别是 PoolFactoryBean/Pool 的阻塞(in postProcessBeforeInitialization(..)
)阻止池在服务器可用之前完全初始化(也可以应用于定位器)。
等待只是尝试打开到服务器(或定位器)的 Socket 连接以验证连接。
另一种方法是创建一个,在已CountDownLatch
注册的 GemFireClientMembershipListener
中使用它,并再次将其与 , 组合BeanPostProcessor
,仅在该postProcessAfterInitialization(..)
方法中。
从技术上讲,这两种方法中只有一种是必要的。虽然,我将它用于测试目的,但它也可以用于实际应用程序,并且在实际应用程序中并不少见。
但是,理想情况下,您首先要启动定位器,因为形成集群取决于它。
希望这可以帮助。
干杯! 约翰