在两个 Docker 容器 运行 HornetQ 之间共享数据文件

Share datafiles between two Docker containers running HornetQ

我有两个 HornetQ 实例,一个用于内部网调用以发布数据,另一个用于从 Internet 调用以读取数据。

由于我被迫指定一个 rmi 主机名,在 JNDI 查找用于调用之后,我的 public 和私有主机名不同,我想在一个 Kubernetes 中启动两个 HornetQ 容器POD,创建两个服务和一个路由。这两个容器在不同的端口上启动,如果我不在它们之间共享数据文件,一切都可以正常工作。

因为我需要在它们之间共享数据文件,所以我创建了一个 emptyDir 卷,这就是我卡住的地方,因为现在其中一个正确启动,而其他死锁:

14:27:45,444 INFO  [org.hornetq.core.server] HQ221034: Waiting to obtain live lock

我试过添加

   <shared-store>true</shared-store>
   <backup>${hornetq.backup:false}</backup>

到他们的configMap,但是没有效果。

如何在它们之间共享数据?经典集群不适合,因为在我的场景中没有 "failover",它们的配置,至少在 rmi public 主机名方面,必须不同。

非常感谢 罗伯托

您看到的行为是正常的。两个 HornetQ 实例不能(也不应该)同时共享相同的数据。由于您将两个实例指向同一目录,因此您已经隐式配置了共享存储高可用性。

尽管您说 "classic clusters aren't suitable" 但在我看来,这正是您在节点之间共享数据所需要的。集群和高可用性(用于故障转移)是独立配置的。如果您正确配置集群,则消息应根据需要在它们之间流动。不会有任何故障转移,每个都可以有自己的主机名。您可以在 HornetQ 文档中阅读更多关于 clusters and high-availability 的信息。

最后,您最初为什么要使用 HornetQ? HornetQ 代码库是 5 年前捐赠给 Apache ActiveMQ 的,现在作为 ActiveMQ Artemis 代理继续存在。 HornetQ 从那时起就没有发布过,但是 ActiveMQ Artemis 已经发布了十多个版本,其中包含许多错误修复和新功能。我建议您尽快迁移到 ActiveMQ Artemis。