19

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

在理想情况下,队列/服务总线将在 IIS 上运行,并允许 Web 和富客户端与其通信。

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

4

10 回答 10

16

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

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

我认为从那时起,这篇文章中提到的所有限制都已修复。

从博客文章中,犀牛队列是:

  • XCopyable、零管理、嵌入式、异步排队服务
  • 面对网络中断时保持稳健
  • System.Transactions 支持
  • 快速地
  • 通过 HTTP 工作
于 2009-02-17T14:55:12.660 回答
5

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

于 2009-02-16T09:13:22.693 回答
2

如果你很高兴成为:

  1. 特定于 Windows
  2. 仅限本地域
  3. 严重限制支持的消息大小
  4. 在 P/Invoke 中包装底层的 win32 调用
  5. 自己处理投票
  6. 处理允许来回通信所需的黑客攻击
  7. 处理保持名称同步所需的共享配置

然后一个快速包装 Windows MailSlot API可能就足够了。

这个简单的例子是一个合理的开始。

本文有一些进一步的信息,但假设用例是通过控件(而不是应有的组件)以及一些较差的 WinForms 集成,因此应考虑作为偶然阅读而不是任何库的基础。

这篇文章是 C++,但标准更高(评论者已对其进行了扩展,以支持将较大的消息批处理成几个较小的消息)。

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

请注意,尽管它很简单、有局限性并且缺乏功能,但它确实提供了多播传递,而您自己在点对点协议上分层通常很复杂。

于 2009-02-13T15:19:43.907 回答
2

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

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

于 2009-02-13T17:56:25.577 回答
2

为什么不是亚马逊的消息服务 Simple Queue Service?

于 2009-02-15T18:31:28.320 回答
1

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

于 2009-02-06T00:03:28.477 回答
1

我目前正在开发基于开源 WCF 的服务总线。你可以在这里找到它:http ://rockbus.codeplex.com/ 。它支持动态(@run-time)订阅、订阅存储库(数据库)、可插入传输、基于 XPath 的基于内容的路由、基于 wcf 协议的事务交付、循环交付、可插入订阅评估等。看一看!

于 2011-08-01T05:07:50.640 回答
0

您是否考虑过通过 http://Iron.io 使用 IronMQ 之类的服务

您不会有任何依赖关系,无需设置任何队列基础设施即可快速原型应用程序,而且它具有高可用性和快速性。

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

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

于 2013-03-02T21:02:05.783 回答
0

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

于 2013-04-12T10:52:08.890 回答
0

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

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

于 2013-11-28T11:04:12.277 回答