Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可嵌入队列?_C#_.net_Message Queue_Rabbitmq_Amqp - Fatal编程技术网

C# 可嵌入队列?

C# 可嵌入队列?,c#,.net,message-queue,rabbitmq,amqp,C#,.net,Message Queue,Rabbitmq,Amqp,我有一个收集动作并将其发送到远程服务器的应用程序。由于这些操作不是时间关键的(可以将它们看作日志行),所以我希望将它们排队并成批发送 这样,我还希望确保不会丢失任何消息(除非硬盘崩溃) MSMQ似乎相当重,使用起来神秘而怪异。此外,它还需要作为系统组件安装 将我的消息序列化为JSON并存储在SQLite中是一件简单而直接的事情,但在我这么做之前,我想知道是否有一个标准化(最好是)队列,我不需要安装,可以嵌入到应用程序中?我真的认为你应该重新考虑MSMQ 默认情况下,它安装在Windows的服务器

我有一个收集动作并将其发送到远程服务器的应用程序。由于这些操作不是时间关键的(可以将它们看作日志行),所以我希望将它们排队并成批发送

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

MSMQ似乎相当重,使用起来神秘而怪异。此外,它还需要作为系统组件安装


将我的消息序列化为JSON并存储在SQLite中是一件简单而直接的事情,但在我这么做之前,我想知道是否有一个标准化(最好是)队列,我不需要安装,可以嵌入到应用程序中?

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

  • 默认情况下,它安装在Windows的服务器版本中
  • 在非服务器版本的windows上安装非常简单
  • 它提供了一个用于观察队列的内置UI
  • 我不知道你的标准是什么,但我只是第一次在一个项目中使用它,这是应用程序中最简单的部分。我当然不认为它比自己将队列存储在数据库中更重要
  • 如果您喜欢使用JSON,您可以自己序列化消息并将其存储为字符串
  • 您可以将队列配置为可恢复的,以便将队列存储在磁盘上而不是内存中

  • 我能看到的唯一严重的反对意见是必须安装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一点也不难使用。是的,它必须作为一个系统组件安装,但这可以由域管理员远程完成,而无需关闭系统,因此这并不是一个很大的负担。这离小事不远了,我已经做过几次了。本地存储邮件,如果服务器确认收到,则在本地删除邮件。不要接受服务器上的重复邮件。这有什么困难?(同意重新发明轮子,但这是计算机科学中最容易解决的问题之一.)