C# 可嵌入队列?
我有一个收集动作并将其发送到远程服务器的应用程序。由于这些操作不是时间关键的(可以将它们看作日志行),所以我希望将它们排队并成批发送 这样,我还希望确保不会丢失任何消息(除非硬盘崩溃) MSMQ似乎相当重,使用起来神秘而怪异。此外,它还需要作为系统组件安装C# 可嵌入队列?,c#,.net,message-queue,rabbitmq,amqp,C#,.net,Message Queue,Rabbitmq,Amqp,我有一个收集动作并将其发送到远程服务器的应用程序。由于这些操作不是时间关键的(可以将它们看作日志行),所以我希望将它们排队并成批发送 这样,我还希望确保不会丢失任何消息(除非硬盘崩溃) MSMQ似乎相当重,使用起来神秘而怪异。此外,它还需要作为系统组件安装 将我的消息序列化为JSON并存储在SQLite中是一件简单而直接的事情,但在我这么做之前,我想知道是否有一个标准化(最好是)队列,我不需要安装,可以嵌入到应用程序中?我真的认为你应该重新考虑MSMQ 默认情况下,它安装在Windows的服务器
将我的消息序列化为JSON并存储在SQLite中是一件简单而直接的事情,但在我这么做之前,我想知道是否有一个标准化(最好是)队列,我不需要安装,可以嵌入到应用程序中?我真的认为你应该重新考虑MSMQ
我能看到的唯一严重的反对意见是必须安装MSMQ。如果您必须在不同版本的Windows上广泛部署此应用程序,我可以将其视为一个重大问题。Graylog2是一个集中式日志记录解决方案,它接受来自AMQP消息的日志条目。也许您可以根据您的用例调整它 在任何情况下,Graylog2都表明AMQP可以用于收集日志消息等工作,而不会丢失任何数据 AMQP不需要安装,因为它是一个协议。您只需要.NET的客户端库。但是,您需要在LAN的某个服务器上安装MQ代理来管理消息流。RabbitMQ由于易于安装而被广泛使用
此外,一旦您开始发送消息,那么您还需要在网络上的某个地方有一个进程来接收消息,并对其执行一些操作,例如写入数据库。如果您想要一个自制解决方案,您可以在日志服务器上安装RabbitMQ,将RabbitMQ的.NET客户端嵌入到您的应用程序中,然后编写一个小程序从队列中读取并将事件写入磁盘
RabbitMQ是相当轻量级的:默认安装只有几Mb,它通常使用大约11Mb的内存来运行。它还提供了对AMQP的扩展,可用于确保一旦服务器接受日志消息,除非硬盘死机,否则日志消息不会丢失。不过,该扩展是非标准的,其他代理可能不支持它。是否真的需要如此大量的体系结构(查看AMQP)?它必须是高性能的、可靠的吗?@Kieren不是真的,这只是一个避免AMQP的想法。性能始终很重要,但更重要的是可靠性方面。不应丢失任何消息,如果服务器无法接受该消息,则应将其保留在本地,并且不应多次成功发送任何消息。这听起来很琐碎,但再一次,我想知道是否有一种标准的方法可以做到这一点。好吧,公平地说,我想我应该试试运气,推荐
List
或Queue
,一个简单的序列化器和异常处理;)确保跨机器的保证一次性交付绝非小事。MSMQ并没有那么重,但不管它有多重都是有原因的。如果已经为您制造了一个非常好的车轮,我会提醒您不要重新发明车轮。MSMQ一点也不难使用。是的,它必须作为一个系统组件安装,但这可以由域管理员远程完成,而无需关闭系统,因此这并不是一个很大的负担。这离小事不远了,我已经做过几次了。本地存储邮件,如果服务器确认收到,则在本地删除邮件。不要接受服务器上的重复邮件。这有什么困难?(同意重新发明轮子,但这是计算机科学中最容易解决的问题之一.)