没有依赖关系的C#队列或ServiceBus?

时间:2009-02-05 18:59:57

标签: c# queue servicebus

是否有可以实现零依赖部署的产品(理想情况下是开放源代码,但不是必需的)?我能找到的每个服务总线或队列库都依赖于其中一个队列应用程序(如msmq)或数据库。我想要一个非常轻量级的解决方案,我可以添加对我的应用程序的引用,构建它,并使用尽可能少的配置进行部署。

在理想的世界中,队列/服务总线将在IIS上运行,并允许Web和富客户端与之通信。

这样的工具非常适合本地开发机器上的大型分布式系统的快速原型设计。

10 个答案:

答案 0 :(得分:16)

来自Ayende的Rhino Queues正是您所寻找的,这是介绍它的博客文章:

http://ayende.com/Blog/archive/2008/08/01/Rhino-Queues.aspx

我认为这篇文章中提到的所有限制都已经修复了。

在博客文章中,犀牛排队的是:

  • XCopyable,零管理,嵌入式,异步排队服务
  • 面对网络时的健壮
  • 中断System.Transactions支持
  • 快速
  • 通过HTTP工作

答案 1 :(得分:5)

与ShuggyCoUk的建议类似,您可以使用Windows内置的ESENT数据库(已安装Windows)来安排队列(或队列)。有一个托管代码访问库(开源):http://www.codeplex.com/ManagedEsent。如果你坚持写/读CLOB或BLOB,它应该工作得很好。如果您想要非常聪明,可以使用NServiceBus并编写(贡献?)ESENT风格的订阅存储和传输。在Ayende's blog上也有一些使用ESENT的尝试(你必须在他的SVN存储库中查找多汁的位)。

答案 2 :(得分:2)

如果你很高兴成为:

  1. Windows特定的
  2. 仅限于本地域
  3. 严重限制支持的邮件大小
  4. 在P / Invoke
  5. 中包装基础win32调用
  6. 自己处理投票
  7. 处理允许来回沟通所需的黑客
  8. 处理保持名称同步所需的共享配置
  9. 然后围绕窗口MailSlot API的快速包装可能就足够了。

    simple example是一个合理的基础。

    This article有一些进一步的信息,但假设用例是通过一个控件(而不是它应该是一个组件)以及一些糟糕的WinForms集成,所以应该考虑偶然阅读而不是基础任何图书馆。

    This article是C ++但具有更高的标准(并且评论者已将其扩展为支持将较大的消息批量分成几个较小的消息)。

    你得到424个字节(因此使用.Net 212个字符)如果你正在谈论文本,你可能想要删除ASCII以使你的有用消息长度加倍。

    请注意,尽管它具有简单性,局限性和缺乏功能,但它确实提供了多播传输,但是在点对点协议本身就很复杂。

答案 3 :(得分:2)

ayende post提供了三种服务总线的有趣比较。我们使用NServiceBus并考虑是否不清楚Udi Dahan是否会响应您插入非依赖队列的方式。

我们很乐意使用MSMQ,但还有其他选择,理论上它应该对几乎任何东西开放,因为根据您的选择,您可能会失去一些可靠性和耐用性。

答案 4 :(得分:2)

为什么不Amazon's消息服务简单队列服务?

答案 5 :(得分:1)

我们将项目从MSMQ移至ActiveMQ。它真的更好:) ActiveMQ是基于Apache Web服务器的开源队列 我们在高频数据工作流程中使用他进行生产,其中msmq存在很多问题(我们使用msmq一年)
csharp实现是nms

答案 6 :(得分:1)

我目前正在开发基于WCF的开源服务总线。你可以在这里找到它:http://rockbus.codeplex.com/。它支持动态(@运行时)订阅,订阅存储库(数据库),可插拔传输,基于XPath的基于内容的路由,通过wcf协议的事务传递,roundrobin传递,可插入订阅评估等。看看吧!

答案 7 :(得分:0)

您是否考虑过http://Iron.io使用像IronMQ这样的服务?

您不会有任何依赖关系,可以在不设置任何队列基础架构的情况下快速构建应用程序原型,并且它具有高可用性和快速性。

目前没有可本地安装的版本,但它基于即将推出的OpenStack协议,因此会有。

顺便说一句,我为Iron工作。

答案 8 :(得分:0)

尝试https://github.com/mcintyre321/PieQ - 这是我尝试编写线程安全,持久,零配置,嵌入式工作队列。它可能需要一点爱,但我认为它可能是你正在寻找的那种工具。

答案 9 :(得分:0)

我开发了一个InMemory JMS库,可用于测试JMS应用程序而无需真正连接到JMS提供程序/服务器(想想hsqldb)。您不必处理连接或协议或任何事情,您只需发送和接收消息即可。

https://github.com/Dhana-Krishnasamy/InMemoryJMS