【发布时间】:2017-03-08 17:07:54
【问题描述】:
我正在尝试使用命名管道实现消息队列系统。从我用过的管道中读取:
pump_read=1
while [[ ${pump_read} -eq 1]]; do
IFS="|" read pump_f1 pump_f2 pump_f3 < queuefile
echo "${pump_f1}|${pump_f1}|${pump_f3} >> pump.log
done
要写入我使用过的命名管道
echo "x|y|z" | ssh user@host "cat > queuefile"
我使用这种方法是因为读取器和写入器可能不在同一个主机上。大多数情况下这是可行的,但相当频繁地我会在我的“||”日志中获得行好像在管道中写入了一个空行。我也有一些时候消息会消失,就好像它们从未进入管道一样。我看不出消息丢失或空白的原因。
有没有人知道我需要在这里查看什么以确保消息不会丢失?我是否正在考虑用 C/C++ 而不是 BASH 编写代码?在某些时候,我可能想将消息异步发布到队列中,由于读/写过程的阻塞,我不确定命名管道是否可行,但是通常这一切都会很快发生,阻塞不会是问题。
【问题讨论】:
标签: linux bash message-queue named-pipes