我有一个应用程序收集操作并将它们发送到远程服务器。由于这些操作不是时间关键的(将它们视为日志行),我想将它们排队并分批发送。
这样,我还想确保不会丢失任何消息(除非硬盘崩溃)。
MSMQ似乎相当重量级,使用起来很神秘和奇怪。此外,它需要作为系统组件安装。
将我的消息序列化为JSON并将它们存储在SQLite中是微不足道和直接的,但在我这样做之前,我想知道是否存在我不需要安装的标准化(最好是AMQP compatible)队列,并且可以嵌入到应用程序中?
答案 0 :(得分:1)
我真的认为你应该重新考虑MSMQ。
我能看到的唯一严重反对意见是必须安装MSMQ。如果您不得不在不同版本的Windows上远程部署此应用程序,我可以将其视为一个重大问题。
答案 1 :(得分:0)
Graylog2是一种集中式日志记录解决方案,可接受来自AMQP消息的日志条目。也许你可以根据你的用例进行调整。
无论如何,Graylog2显示AMQP适用于收集日志消息而不会丢失任何内容的作业。
AMQP不需要安装,因为它是一种协议。您只需要.NET的客户端库。但是,您需要在LAN上的某个服务器上安装MQ代理来管理消息流。 RabbitMQ被广泛使用,因为它易于安装。
此外,一旦你开始发送消息,那么你还需要在网络上的某个地方有一个进程,接收它们并对它们做一些事情,比如写入数据库。
答案 2 :(得分:0)
如果你想要一个自制软件解决方案,你可以在日志记录服务器上安装RabbitMQ,将RabbitMQ的.NET客户端嵌入到你的应用程序中,然后编写一个小程序来从队列中读取并将事件写入磁盘。
RabbitMQ相当轻量级:默认安装只有几个Mb,它通常使用大约11Mb的内存来运行。它还提供了AMQP的扩展,Publisher Confirms,可用于确保一旦服务器接受日志消息,它就不会丢失,除非硬盘死机。但是,扩展是非标准的,并且它可能不受其他经纪人的支持。