sql-server - SQL Server Service Broker 的缺点

标签 sql-server msmq message-queue service-broker

我一直在进行 SQL Server Service Broker 范围的研发,以取代当前的消息传递解决方案 MSMQ。我想了解 SQL Server Service Broker 与 MSMQ 相比在以下标准方面的缺点。

  1. 开发
  2. 问题排查
  3. 性能(假设我们每天需要处理 100,000 条消息,平均大小约为 25 KB)
  4. 可扩展性

最佳答案

我在当前的项目中使用了 Service Broker,之前使用过 MSMQ(由 MassTransit 代理)并取得了巨大成功。我最初对使用 Service Broker 持怀疑态度,但我不得不承认它的性能非常好。

如果您使用发布/订阅模型,那么我每次都会使用消息队列(尽管如果项目允许,我会使用 RabbitMQ 而不是 MSMQ),但是当您只想仔细浏览一堆数据并将其保留时对于 Sql Server,那么 Service Broker 是一个很好的解决方案:它如此“接近金属”这一事实是一个很大的优势。

开发

Service Broker 需要大量样板文件,这很痛苦,但除非您计划拥有大量不同的队列,否则它是可以管理的。 Visual Studio 中的 Sql Server 项目消除了部署过程中的许多痛苦。

疑难解答

Service Broker 是一个黑匣子 - 消息进入后通常会出来,但如果没有,则故障排除可能会出现问题,而您所能做的就是 query the system views - 有时你根本无法找出哪里出了问题。这很烦人,但 MSMQ 也有同样的问题..

性能

Service Broker 的性能非常适合我们的用例(请参阅下面的评论部分进行讨论)。我们每天处理超过 100,000 条消息,在 SLA 负载下每小时处理超过 30,000 条消息,而且我们的消息规模很大。我估计在重负载测试期间我们每小时处理接近 100,000 条消息。

为了获得最佳性能,我建议您使用像 this one 这样的对话池1 作为创建 Service Broker 对话框 can be an expensive operation .

您还需要使用the Error Handling procedures detailed by Remus Rusanu 。 (如果您确实使用 Service Broker,那么您不妨在开始之前阅读 Remus 就该主题撰写的所有内容,因为您最终会读完它!)

可扩展性

如果需要,您当然可以使用多个服务器来扩展,尽管我们没有必要这样做,而且从您提到的负载大小来看,我认为您也不需要这样做。

我认为我没有真正设法回答您的问题,因为我没有充分强调 Service Broker 队列的缺点。我想说,其内部运作的难以理解的本质是最让我恼火的事情——当它工作时,它工作得很好,但当它停止工作时,很难弄清楚为什么。此外,如果队列中有大量消息,则使用 ALTER QUEUE 需要很长时间才能完成。

不知道如何使用 MSMQ 也会导致公平比较这两种技术变得不同。

1 在要点中重新创建为 original url现在已“禁用”,并且该页面不在互联网文件中。最终找到了一份here

关于sql-server - SQL Server Service Broker 的缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21570337/

相关文章:

iis-6 - 从 MVC .Net 访问 NServiceBus MSMQ 的权限错误

c# - 维护传出队列中消息的顺序 - .Net

c# - 使用 GO 批处理分隔符执行 SQL 脚本并读取结果

sql - 如何根据唯一 ID 列选择值

sql - 从 SSMS 中的查询结果使用 SQL 创建表

.net - msmq 基础知识以及如何跟踪消息的传入和传出时间

message-queue - 在 Kafka 中设计生产者和消费者的组件

node.js - 避免 redis 竞争条件

c++ - 使用 WebSphere MQ 的客户端服务器

c# - EF6 - 没有做我对 .Any() 的预期