我需要将信息从 shell 脚本(从基于 linux 的应用程序调用)传递到 java 应用程序。
命名管道很麻烦,因为我无法在不考虑对管道读/写端的复杂影响的情况下启动/停止任何一项服务。
套接字很难,因为如果重新启动监听过程,则没有排队机制,简单的实现需要不断创建新的套接字(否则 shell 脚本会因检查并重新启动而变得非常复杂-套接字和排队代码)。
我最近在阅读这些System V/POSIX linux 消息队列。我正在运行 Fedora 12,想知道是否有配置这些消息队列并从 Java 与它们交互的好方法。
最佳答案
您不能直接使用它们,您必须使用一些 JNI 魔法将它们连接在一起。
您在使用 Pipes 时遇到了什么问题? Java 将这些视为通用文件。我没有广泛使用它们,但我对 Pipes 没有任何实际问题。唯一的细节是,如果生产者跟不上,管道读取器需要不断地重新打开管道。
但如果任何一方失败,另一方只会阻塞等待另一方恢复。
你只需要小心从管道中读取缓冲区。如果您从管道读入缓冲区,然后失败,则该数据将丢失。
关于java - Java 可以与 System V linux 消息队列交互吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6407034/