可嵌入队列?

时间:2011-08-09 22:14:21

标签: c# .net message-queue rabbitmq amqp

我有一个应用程序收集操作并将它们发送到远程服务器。由于这些操作不是时间关键的(将它们视为日志行),我想将它们排队并分批发送。

这样,我还想确保不会丢失任何消息(除非硬盘崩溃)。

MSMQ似乎相当重量级,使用起来很神秘和奇怪。此外,它需要作为系统组件安装。

将我的消息序列化为JSON并将它们存储在SQLite中是微不足道和直接的,但在我这样做之前,我想知道是否存在我不需要安装的标准化(最好是AMQP compatible)队列,并且可以嵌入到应用程序中?

3 个答案:

答案 0 :(得分:1)

我真的认为你应该重新考虑MSMQ。

  1. 默认安装在Windows的服务器版本中。
  2. 在非服务器版本的Windows上安装非常简单。
  3. 它提供了一个用于观察队列的内置UI
  4. 我不知道你的标准是什么'沉重和晦涩' - 但我只是在项目中第一次使用它,这是应用程序中最简单的部分。我当然不认为它比自己在数据库中存储队列更重要。
  5. 如果您更喜欢使用JSON,则可以自行序列化消息并将其存储为字符串
  6. 您可以将队列配置为可恢复 - 因此将队列存储在磁盘而不是内存中
  7. 我能看到的唯一严重反对意见是必须安装MSMQ。如果您不得不在不同版本的Windows上远程部署此应用程序,我可以将其视为一个重大问题。

答案 1 :(得分:0)

Graylog2是一种集中式日志记录解决方案,可接受来自AMQP消息的日志条目。也许你可以根据你的用例进行调整。

无论如何,Graylog2显示AMQP适用于收集日志消息而不会丢失任何内容的作业。

AMQP不需要安装,因为它是一种协议。您只需要.NET的客户端库。但是,您需要在LAN上的某个服务器上安装MQ代理来管理消息流。 RabbitMQ被广泛使用,因为它易于安装。

此外,一旦你开始发送消息,那么你还需要在网络上的某个地方有一个进程,接收它们并对它们做一些事情,比如写入数据库。

答案 2 :(得分:0)

如果你想要一个自制软件解决方案,你可以在日志记录服务器上安装RabbitMQ,将RabbitMQ的.NET客户端嵌入到你的应用程序中,然后编写一个小程序来从队列中读取并将事件写入磁盘。

RabbitMQ相当轻量级:默认安装只有几个Mb,它通常使用大约11Mb的内存来运行。它还提供了AMQP的扩展,Publisher Confirms,可用于确保一旦服务器接受日志消息,它就不会丢失,除非硬盘死机。但是,扩展是非标准的,并且它可能不受其他经纪人的支持。