【问题标题】:Payara/Hazelcast Instances Object HierarchyPayara/Hazelcast 实例对象层次结构
【发布时间】:2021-08-06 14:20:17
【问题描述】:

众所周知,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 种不同方式获取实例信息:

  1. 域日志文件显示:

    Payara 数据网格状态:DG 版本:4 DG 名称:thss DG 大小:3 实例:{ DataGrid: thss 名称: ThssWEBServer Lite: false This: 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 这:true UUID:cf5fb684-2729-4f4e-91ef-cbaf85e0ddfa 地址:/10.0.1.102:5900 }

    有三个 Hazelcast 实例名称为:server(DAS),另外两个已添加到域中

  2. admin_ui:

  3. 作为管理员 CLI:

    asadmin> 列表实例 ThssEJBServer 正在运行
    ThssWEBServer 正在运行
    命令列表实例成功执行。 作为管理员>

  4. 以编程方式

     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,部署到Instance 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> 

【问题讨论】:

    标签: java instance hierarchy hazelcast payara


    【解决方案1】:

    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作为documented here检索它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多