一切似乎都可以正常创建,但是一旦完成初始化,一切就停止了。
@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.
答案 0 :(得分:0)
是的,这是预期的行为,OOTB。
大多数Apache Geode进程(客户端(即ClientCache
,Locators
, 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 使用LocatorLauncher
和ServerLauncher
类来配置和派生JVM进程以启动Locators
和 servers 。
通过示例,here是使用start locator
类的 Gfsh的 LocatorLauncher
命令。从技术上讲,它使用从LocatorLauncher
类实例到construct(特别是here)java
命令行中用于fork and launch(特别是{ ,here)一个单独的JVM进程。
但是,这里的键是启动LocatorLauncher
时传递给Locator
类的特定“命令”,它是START
命令(here)。 / p>
在LocatorLauncher
类中,我们看到START
命令执行了以下操作,从main method到run 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进程关闭的额外逻辑。