【问题标题】:How to start Hazelcast TCP/IP interface programmatically?如何以编程方式启动 Hazelcast TCP/IP 接口?
【发布时间】:2014-06-02 05:49:45
【问题描述】:

在我的项目中,我有 2 台服务器运行一个应用程序。他们运行两个初始化为 Spring bean 的 Hazelcast 节点。我使用 Hibernate,Hazelcast 也支持它的二级缓存。有一个分布式地图,它由一个地图加载器支持,该加载器在一开始就准备好缓存。如果重启了 2 台服务器中的一台(节点 B),会出现以下情况:

  • 节点 A 发现节点 B 已消失并定期尝试重新连接
  • 节点 B 开始初始化 Spring 上下文,在此期间 Hazelcast 实例也启动
  • 节点 A 加入节点 B 并且一些迁移 (?) 操作命中节点 B,它试图获取上述地图
  • Spring 并行初始化 JPA 实体管理器,该管理器也尝试访问映射(用于设置 L2 缓存)
  • 这会导致死锁:Spring init 线程持有与 bean map 相关的锁并尝试获取分布式映射,而迁移操作持有映射并尝试从 Spring 获取 maploader bean

我的问题是我无法控制 Hazelcast 何时首次接受来自其对等方的连接。

我的 HZ bean 是这样定义的:

@Bean
public void hazelcast() {
  Hazelcast.newInstance(config());
}

在 Spring 完全启动之前,我迫不及待地接受连接。在我的应用程序完全启动之前,我找不到任何方法来阻止 Hazelcast 执行操作。

如何以编程方式启动 Hazelcast TCP/IP 网络接口?或者我怎样才能拒绝连接?您能否建议一种无死锁模式来实现 JPA 的 L2 缓存,在启动时使用也使用 JPA 加载特定分布式地图的 maploader bean 执行缓存素数?

【问题讨论】:

    标签: java hibernate caching jpa hazelcast


    【解决方案1】:

    我不明白为什么它会导致死锁,这听起来更像是一个错误。您能否在邮件列表中提供一个产生该错误的小型演示应用程序?

    【讨论】:

    • 这个bug是因为分布式地图附加的maploader是一个spring bean。主要问题是我还没有找到灵活的方法来防止早期迁移操作..
    • 也许使用 -Dhazelcast.initial.min.cluster.size=x 让您的集群等待多个节点?我想我仍然没有真正看到问题,即使在 Spring bean 上它也不应该在启动时挂起。
    • @jabal,你找到解决这个问题的方法了吗?
    猜你喜欢
    • 1970-01-01
    • 2011-06-27
    • 2011-08-17
    • 2012-03-19
    • 2017-06-02
    • 1970-01-01
    • 2010-12-13
    • 2018-07-25
    相关资源
    最近更新 更多