java - Payara/Hazelcast 实例对象层次结构
问题描述
众所周知,Payara/Hazelcast 应用平台没有很好地记录其架构级别的对象关系或层次结构。我没有在他们的文件或互联网上找到任何东西。
我试图找出了解 Payara/Hazelcast 对象(域、集群、部署组、Hazelcast 实例、应用程序)的关系。
我的环境为:Payara 5.2021.3 社区版在两台相同的机器上运行 Centos 8 Linux,它被配置为:
- domain name: production
- cluster name: thss
- nodes(two): localhost-production(CONFIG), centos8thssv2-production(SSH)
- instances(two): ThssEJBServer (runs on localhost-production), ThssWEBServer (runs on centos8thssv2-production)
我正在尝试从 4 种不同的方式获取实例信息:
域日志文件显示:
Payara 数据网格状态:DG 版本:4 DG 名称:thss DG 大小:3 实例:{ DataGrid:thss 名称:ThssWEBServer Lite:false 此:false UUID:7d51a149-ce9f-43ce-a905-22a63a685689 地址:/10.0.1.152: 5900 DataGrid:thss 名称:server Lite:false This:false UUID:796ce6ef-8694-44cb-9378-1724dfd3556c 地址:/10.0.1.102:4900 DataGrid:thss 名称:ThssEJBServer Lite:false This:true UUID:cf5fb684-2729- 4f4e-91ef-cbaf85e0ddfa 地址:/10.0.1.102:5900 }
有三个 Hazelcast 实例名称为:服务器(DAS),另外两个被添加到域中
管理员用户界面:
管理员 CLI:
asadmin> list-instances ThssEJBServer running
ThssWEBServer running
命令 list-instances 成功执行。作为管理员>以编程方式
Set<HazelcastInstance> instanceSet = Hazelcast.getAllHazelcastInstances(); logger.info("-------------------There are "+instanceSet.size()+" found in the cluster"); if(instanceSet.size()>0){ for (HazelcastInstance instance : instanceSet) { logger.info("Instance name: "+instance.getName()); } }
这段代码被放到 EJB 模块中并注解为@Startup 和@Singleton,在部署到实例 ThssEJBServer 后,ThssEJBServer 日志显示:
[2021-05-17T15:55:23.645+1000] [Payara 5.2021.3] [INFO] [] [com.longz.thss.ejb.listener.ThssHzProvider] [tid: _ThreadID=118 _ThreadName=admin-thread-pool::admin-listener(1)] [timeMillis: 1621230923645] [levelValue: 800] [[
-------------------There are 1 found in the cluster]]
[2021-05-17T15:55:23.645+1000] [Payara 5.2021.3] [INFO] [] [com.longz.thss.ejb.listener.ThssHzProvider] [tid: _ThreadID=118 _ThreadName=admin-thread-pool::admin-listener(1)] [timeMillis: 1621230923645] [levelValue: 800] [[
Instance name: magical_montalcini]]
请注意,仅找到一个实例,其名称为:magic_montalcini,此名称未出现在任何其他实例中
这不仅是结果,当前几次运行相同的 Java 代码时,我们发现这些 Java 代码片段可以提供正确的 Hazelcast 实例(其中 3 个),但是在大约 4-5 次重新运行这段代码之后,我们从日志中获得了较高的结果,早期的结果丢失并且不再可重现。
另一个有趣的事情是:
当我将应用程序部署到域时,它也显示在 Admin_ui 中
但是当我尝试从 asadmin-CLI 中列出它时,通过运行 asadmin list-applications,只有一个显示
asadmin> list-applications<br>
__monitoringconsole <health, metrics, openapi, web>
Command list-applications executed successfully.<br>
asadmin>
解决方案
HazelcastInstance 是您用来访问集群的 Hazelcast 对象。在每个 JVM 上,每个 Hazelcast 集群只有一个 HazelcastInstance。Payara Servr 创建单个 Hazelcast 集群,Payara 实例由其中的集群成员表示。您可以使用以下方式获取 Payara 实例列表
Hazelcast.getAllHazelcastInstances().iterator().next().getCluster().getMembers()
Payara Server 直接为您提供 Hazelcast 实例,因此您可以将其简化为:
@Inject HazelcastInstance hzInstance;
hzInstance.getCluster().getMembers()
如果您可以使用注入,您也可以使用 JNDI 来检索它,如此处所述。
推荐阅读
- wordpress - Woocommerce 中的可变产品批量折扣
- apache-spark - INSERT OVERWRITE 语句中的列列表规范
- angular5 - 如何使用angular 5打开一个excel文件
- presto - prestodb get user identity in a stored procedure
- ios - CMPedometer queryPedometerData() returning 0 steps when steps exist
- ios - 无法连接到lockdownd。在 Ubuntu 上退出
- apache-spark - Do spark tasks(per executor) share cache location?
- wordpress - 无法访问 Wordpress 后端
- asp.net-mvc - 从服务层到数据层的mvc简单依赖注入(三层应用)
- python - Tricky way to split string by \t