【问题标题】:Looking for some Java good practice advice regarding distributed applications and message passing寻找一些关于分布式应用程序和消息传递的 Java 良好实践建议
【发布时间】:2011-05-28 12:37:36
【问题描述】:

一些背景信息。这是一个具有多个节点的分布式应用程序。 “通信”线程发送和接收在这些节点之间发送的所有消息。这是无法更改的。

“doStuff”线程要求“communication”线程向节点发送消息。然后它需要等待来自另一个节点的响应。 “通信”线程将收到此响应消息。然后它需要将此消息传递到正确的“doStuff”线程。

我不确定需要在节点或消息中存储什么样的信息,以确保正确的线程始终接收响应消息。

寻找一些关于如何实现这一目标的建议。感谢阅读:)

【问题讨论】:

  • 您真正想在这里实现什么?该应用程序打算如何使用?
  • 基本概述是一个控制文件存储和检索请求的系统。每个存储或检索请求都将产生自己的线程,一旦请求完成,该线程将终止。我正在使用的库需要使用“通信”线程。尽管这一切都可以在这个“主”线程中处理,但理想情况下,这一切都可以并行发生。我可能会重新考虑只有 3 个线程:通信、存储和检索。

标签: java multithreading distributed messages


【解决方案1】:

您可能希望将某种消息 ID 附加到要包含在响应中的传出消息。序列号或 UUID 可能会完成这项工作。然后,您的通信器线程可以跟踪(地图?)哪些“doStuff”线程正在等待给定的响应并将其传回。

您还可以跟踪请求的发送时间,以便在未收到响应时,通信线程可以通知 doStuff 线程未收到响应。

【讨论】:

  • 感谢您的回复。这正是我要做的。
【解决方案2】:

似乎并不难

使用线程 id 或 doStuff 线程发明的其他不透明令牌,该令牌由通信线程存储(映射到调用线程 id)并与响应一起返回通信线程在 Map 中查找它以识别对应的线程。

还是我错过了什么?

【讨论】:

  • 你说的很对。这不是很困难。看完这些回复就明白了。谢谢:)
【解决方案3】:

使用JMS 是一个选项吗?如果是这样,您可能会发现这比“自己动手”更实用。一般来说,异步消息传递是一个已解决的问题。如果 JMS 是一个选项,请特别查看 TopicRequestor 和/或 QueueRequestor

【讨论】:

  • 不,在这种特殊情况下它不是一个选项,但无论如何谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多