java - 让两个长时间运行的进程通过文本文件互相发送 "talk"

标签 java communication

我有两个(Java)进程在不同的 JVM 上重复运行。第一个经常发现一些“信息”并需要将其存储在某个地方。第二个进程定期读取此信息来处理它。这些间隔或多或少是随机的,因此进程 1 可能会找到三条信息,直到进程 2 读取它们为止,反之亦然。

我的方法是将这些信息写入文本文件。但我担心附加和读取文本文件会意外同时发生,从而导致我遇到锁。但是为每条信息编写一个新的文本文件似乎有点矫枉过正。

更好的解决方案是什么?

编辑:抱歉,我没有说清楚:java进程在不同的JVM中运行。他们无法直接看到对方。

最佳答案

只要您小心处理文件并且更新率不高,例如,您就可以使其发挥作用。每秒 10 次更新。

注意:您可以通过文件重命名而不是锁定来实现。

What would be a better solution?

几乎任何东西,SO 并不是为了推荐东西,但在这种情况下,我可以推荐任何东西,而无需更具体的要求。例如,我可以推荐我的图书馆 Chronicle Queue因为我写了它并且我确信它可以做你想要的,但是有很多可能的选择。

I am sending about one line of text every minute.

因此,您可以为每条消息编写一个临时文件,完成后重命名。消费者可以有一个目录观察器,因此一旦您完成此操作,它就会知道。完成后,消费者可以删除该文件。这会产生开销,但不会超过 10 毫秒。

如果你想保留所有消息的记录,生产者也可以写入日志文件。

关于java - 让两个长时间运行的进程通过文本文件互相发送 "talk",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39406322/

相关文章:

java - 在 OpenSessionInViewFilter 之后没有定义名为 'sessionFactory' 的 bean

java - 如何为 javax.xml.ws.Holder 设置一个值?

javascript - 客户端之间的离线 PWA 通信

python - 使用 Python 多处理进行通信时 OSX 和 Linux 之间的性能差异

types - 在 Rust 程序和嵌入式 WebAssembly 运行时之间进行通信的最佳实践是什么?

java - 在 applet-servlet 通信中传输多个参数

磁盘上的 Java 目录大小?

java - 如何正确地将带有 "join fetch"子句的 JPQL "where"表达为 JPA 2 CriteriaQuery?

communication - 你为提高软技能所做的最有效的事情是什么?

communication - 两部手机之间无法发送GSM数据吗?