【问题标题】:Is there a good open-source MongoDB Queue Implementation for the C# DriverC# 驱动程序是否有一个好的开源 MongoDB 队列实现
【发布时间】:2012-08-29 11:14:33
【问题描述】:

并不是说写一个不够容易(或有趣),可以说不要重新发明轮子是有道理的。我环顾了各种尝试,但似乎还没有遇到支持这些标准的实现;

具有MongoDB持久化的简单队列OSS系统;

  • 基于 C# 驱动程序(官方)(完整 POCO 序列化)
  • 尾随游标而不是轮询
  • 处理消息超时(GC 正确)
  • 处理消费者故障(理想情况下检测重新插入时发生崩溃,但延迟重新插入超时是可以的)所以 findAndModify 完成
  • 多个作者,多个消费者
  • 线程安全

很高兴拥有;

  • 允许(仅最新)消息(替换 Q 中的旧消息)

如果有人在 GitHub 上提供了一个我还没有找到的简单易用的库,请说出来!

【问题讨论】:

    标签: mongodb message-queue mongodb-.net-driver


    【解决方案1】:

    这是我的小项目 - 一个 .net 消息总线实现,可与 MS SQL 队列或 MongoDB 一起使用(MongoDB 支持是最近添加的)。链接:http://code.google.com/p/nginn-messagebus/http://nginn.org/blog 以获取一些示例。 我不确定这是否是您正在寻找的,它也缺乏文档和示例部门,并且与您的规格不完全匹配(轮询而不是拖尾) - 但也许值得一试。这是一个发布-订阅消息总线,如 NServiceBus 或 MassTransit - 不是原始消息队列。

    PS 恐怕您的规范中有相互排斥的要求:您不能将可尾游标与并发消费者一起使用,因为您失去了原子性。如果你想尾随队列,你应该只使用一个消费者。

    【讨论】:

    • 实际上,您可能是对的。如果您想要多个读者,轮询与拖尾是一个相对较小的妥协。对于许多实现,尽管在任何情况下单个读取器可能是正确的架构,但您只需要确保读取器进程在出现错误时被回收。使用幂等消息(允许至少一次语义)并使用可能与进程回收和消息重试计数相结合的消息超时可能是一件好事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多