SQL Service Broker作为.net的通用企业消息总线

Nov*_*vox 8 sql-server esb service-broker

我需要一个针对发布者/订阅者功能的企业服务总线/消息队列解决方案.我知道MANY存在...... MSMQ,MS系列,RabbitMQ,NServiceBus等等......

我的一个要求是在共享托管解决方案中,我能保证的唯一依赖是SQL 2005及更高版本......这直接导致我直接进入SQL Service Broker.

如果听起来我正试图将ESB功能塞进SSB ......我想我是......

我的问题是:有没有人知道.NET API或框架位于SQL Service Broker之上并且已经提供了大量的管道工程?

如果我使用纯ADO.net,我可以通过调用存储过程将项添加到队列,但是然后:

  1. 根据谈话的性质,我会为每条消息进行一次对话吗?
  2. 如果是这样,我会丢失顺序消息处理吗?
  3. 我如何接收消息(我知道t-SQL中的接收语法),是否在消息循环中重复调用存储过程以尝试从队列中获取消息?
  4. 或者我会等待吗?保持连接打开并永久执行存储过程?
  5. SQL Service Broker不支持独白对话,但我读过它们可以实现...

正是这些问题让我希望现有的.net解决方案已经完成了所有这些工作.

Rem*_*anu 7

尝试为SQL Server Service Broker打包WCF传输通道,但afaik是弃用软件.

NServiceBus支持Service Broker作为传输,请参阅使用NServiceBus和ServiceBroker.net,并且有一些github项目,如SQL Service Broker的简单包装API和NServiceBus的ITransport插件.虽然不完全是主流,但确实存在一些支持和社区努力.

作为ESB,我认为由于缺乏真正的pub-sub和广播,你会遇到问题.SQL Server 2012能够向多个目标发送消息,请参阅如何使用SQL Server Service Broker组织消息,但您仍需要从头开始实现pub-sub基础结构(发布主题,订阅者等).MySpace做到了这一点并且是一项重大工作,请参阅使用Reliable Messaging扩展SQL Server.我的观察指的是SSB的低级别直接使用,我从未使用过NServiceBus,所以我不知道它在SSB上抽象/暴露unicast/broadcast/multicast/pub-sub有多好.

至于您的具体问题,我建议阅读编写服务代理程序重用对话.