【问题标题】:ActiveMQ + NFS race conditionActiveMQ + NFS 竞争条件
【发布时间】:2012-10-25 16:48:11
【问题描述】:

我在计算机集群上使用 ActiveMQ 在 java 进程之间发送消息。

集群具有可从所有主机访问的共享 NFS 挂载。

我遇到了以下场景的问题:

  • 主机 A 创建一个新文件“/path/to/shared/nfs/xyz”
  • 主机 A 向主机 B 发送消息:“process /path/to/shared/nfs/xyz”
  • 主机B收到消息,尝试打开文件
  • 主机 B 失败,因为 NFS 客户端尚未注意到之前在 A 上创建了一个新文件(ActiveMQ 和 NFS 协议之间的竞争条件)

我的解决方案是在所有消息接收器中添加一个循环,该循环最多会等待 1 分钟,以便 NFS 意识到添加了一个新文件。

然而,这个解决方案似乎不干净。解决这个问题的好方法是什么?您知道任何适用的企业集成设计模式吗?

【问题讨论】:

  • 我认为文件太大而无法通过 jms 发送?有多大?

标签: design-patterns activemq messaging apache-camel nfs


【解决方案1】:

另一个想法是让主机 B 成为文件轮询使用者,它会拾取放置在“/path/to/shared/nfs/xyz”中的任何内容并对其进行处理......这样你就不需要任何从 A 到 B 的消息传递来启动它,只是文件的存在。

您仍然可以使用Apache Camel's file component...之类的东西轻松完成操作...

from("file://path/to/shared/nfs/xyz").to(...);

【讨论】:

  • 这很好。这样他们只使用一种协议,没有竞争条件。
猜你喜欢
  • 2022-01-23
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多