@LocatorApplication启动,然后立即停止

时间:2020-07-31 19:06:41

标签: spring-data spring-data-gemfire

一切似乎都可以正常创建,但是一旦完成初始化,一切就停止了。

@SpringBootApplication
@LocatorApplication
public class ServerApplication {

  public static void main(String[] args) {
    SpringApplication.run(ServerApplication.class, args);
  }
}

日志:

2020-08-03 10:59:18.250  INFO 7712 --- [           main] o.a.g.d.i.InternalLocator                : Locator started on 10.25.209.139[8081]
2020-08-03 10:59:18.250  INFO 7712 --- [           main] o.a.g.d.i.InternalLocator                : Starting server location for Distribution Locator on LB183054.dmn1.fmr.com[8081]
2020-08-03 10:59:18.383  INFO 7712 --- [           main] c.f.g.l.LocatorSpringApplication         : Started LocatorSpringApplication in 8.496 seconds (JVM running for 9.318)
2020-08-03 10:59:18.385  INFO 7712 --- [m shutdown hook] o.a.g.d.i.InternalDistributedSystem      : VM is exiting - shutting down distributed system
2020-08-03 10:59:18.395  INFO 7712 --- [m shutdown hook] o.a.g.i.c.GemFireCacheImpl               : GemFireCache[id = 1329087972; isClosing = true; isShutDownAll = false; created = Mon Aug 03 10:59:15 EDT 2020; server = false; copyOnRead = false; lockLease = 120; lockTimeout = 60]: Now closing.
2020-08-03 10:59:18.416  INFO 7712 --- [m shutdown hook] o.a.g.d.i.ClusterDistributionManager     : Shutting down DistributionManager 10.25.209.139(locator1:7712:locator)<ec><v0>:41000. 
2020-08-03 10:59:18.517  INFO 7712 --- [m shutdown hook] o.a.g.d.i.ClusterDistributionManager     : Now closing distribution for 10.25.209.139(locator1:7712:locator)<ec><v0>:41000
2020-08-03 10:59:18.518  INFO 7712 --- [m shutdown hook] o.a.g.d.i.m.g.Services                   : Stopping membership services
2020-08-03 10:59:18.518  INFO 7712 --- [ip View Creator] o.a.g.d.i.m.g.Services                   : View Creator thread is exiting
2020-08-03 10:59:18.520  INFO 7712 --- [Server thread 1] o.a.g.d.i.m.g.Services                   : GMSHealthMonitor server thread exiting
2020-08-03 10:59:18.536  INFO 7712 --- [m shutdown hook] o.a.g.d.i.ClusterDistributionManager     : DistributionManager stopped in 120ms.
2020-08-03 10:59:18.537  INFO 7712 --- [m shutdown hook] o.a.g.d.i.ClusterDistributionManager     : Marking DistributionManager 10.25.209.139(locator1:7712:locator)<ec><v0>:41000 as closed.

1 个答案:

答案 0 :(得分:0)

是的,这是预期的行为,OOTB。

大多数Apache Geode进程(客户端(即ClientCacheLocators Managers 和“对等” Cache节点/集群/分布式系统的成员) )仅创建守护程序线程(即非阻塞线程)。因此,Apache Geode JVM进程将启动,初始化自身,然后立即关闭。

只有Apache Geode CacheServer进程(一个具有对端客户端监听功能的Cache组件的“对等” CacheServer)才能启动并继续运行。这是因为用于侦听客户端ServerSocket连接的Socket是在非守护进程线程(即阻塞线程)上创建的,这可以防止JVM进程关闭。否则,CacheServer也会掉进去。

您可能会想, Gfsh 如何防止Locators(即使用start locator命令)和“服务器”(即使用start server命令)关闭?

注意:默认情况下, Gfsh 使用CacheServer命令启动GemFire / Geode服务器时会创建一个start server实例。通过为CacheServer命令指定--disable-default-server选项,可以禁用“服务器”的start server组件。在这种情况下,该“服务器”将无法为客户提供服务。对等节点/成员仍将继续运行,但并非没有额外的帮助。有关start server Gfsh 命令的更多详细信息,请参见here

那么, Gfsh 如何防止进程崩溃?

幕后, Gfsh 使用LocatorLauncherServerLauncher类来配置和派生JVM进程以启动Locators servers

通过示例,here是使用start locator类的 Gfsh的 LocatorLauncher命令。从技术上讲,它使用从LocatorLauncher类实例到construct(特别是herejava命令行中用于fork and launch(特别是{ ,here)一个单独的JVM进程。

但是,这里的键是启动LocatorLauncher时传递给Locator类的特定“命令”,它是START命令(here)。 / p>

LocatorLauncher类中,我们看到START命令执行了以下操作,从main methodrun method,它starts { {1}},然后waitsOnLocator(使用implementation)。

在没有等待的情况下,Locator会在您遇到问题时直接掉下来。

您可以使用以下代码模拟相同的效果(即“直通”),该代码使用Apache Geode API来配置和启动Locator(进程内)。

Locator

这个简单的小程序将直接通过。但是,如果取消注释public class ApacheGeodeLocatorApplication { public static void main(String[] args) { LocatorLauncher locatorLauncher = new LocatorLauncher.Builder() .set("jmx-manager", "true") .set("jmx-manager-port", "0") .set("jmx-manager-start", "true") .setMemberName("ApacheGeodeBasedLocator") .setPort(0) .build(); locatorLauncher.start(); //locatorLauncher.waitOnLocator(); } } ,则JVM进程将阻塞。

这与SDG的LocatorFactoryBean类(请参见source)实际所做的没什么不同。它也使用locatorLaucncher.waitOnLocator()类来配置和引导LocatorLauncher进程内。 Locator是在LocatorFactoryBean类上声明SDG Locator注释时用于配置和引导@LocatorApplication的类。

但是,我确实认为这里有改进的空间。因此,我已经提交了DATAGEODE-361

同时,作为一种变通办法,通过查看 Smoke Test 中与 @SpringBootApplication的相同效果。 > Apache Geode的Spring Boot (SBDG)项目。参见here

但是,在DATAGEODE-361完成之后,不再需要用于阻止Locator JVM进程关闭的额外逻辑。