当前位置:  开发笔记 > 数据库 > 正文

我应该使用MSMQ或SQL Service Broker进行交易吗?

如何解决《我应该使用MSMQ或SQLServiceBroker进行交易吗?》经验,为你挑选了1个好方法。

我的团队负责人已经要求我调查MSMQ作为我们产品新版本的选项.我们在当前版本中使用SQL Service Broker.我已经完成了相当多的实验和谷歌搜索,以找到哪个产品更符合我的需求,但我想我会问我最熟悉的网站来编程答案.

一些细节:

我们的客户端是.NET 1.1和2.0代码; 这是消息发送的地方.

SQL Server 2005实例中的目标.所有消息最终都是数据库更新或插入.

我们将发送几个必须被视为交易的更新.

我们必须拥有完美的消息可恢复性; 没有消息可以丢失.

即使目标SQL服务器关闭,我们也必须是异步的并且能够接受消息.

开发我们自己的排队解决方案不是一种选择; 我们是一个小团队.

到目前为止我发现的事情:

MSMQ和SQL Service Broker都可以完成这项工作.

对于事务性消息来说,服务代理似乎更快.

Service Broker需要在某处运行SQL Server,而MSMQ需要在任何地方运行任何已配置的Windows机器.

MSMQ似乎更好/更快/更容易在群集中设置/运行.

我错过了什么吗?这里有明显的赢家吗?任何想法,经验或链接都会受到重视.谢谢!

编辑:我们最终坚持使用服务代理,因为我们的一些客户端代码中使用了自定义数据库框架(我们更好地处理事务).该代码捕获了事务的SQL,但没有.客户端代码也是.NET的1.1版本,因此我们必须升级所有客户端代码.谢谢你的帮助!



1> Aaron Weiker..:

刚刚将我的应用程序从Service Broker迁移到MSMQ,我将不得不投票使用MSMQ.有几个因素需要考虑,但其中大部分都与您使用数据的方式和处理方式有关.

如果在数据库中完成处理?服务经纪人

如果只是数据移动?服务经纪人

处理是在.NET/COM代码中完成的吗?MSMQ

您是否需要远程分布式事务(例如,在不同于SQL的框上进行处理)?MSMQ

您是否需要能够在目的地关闭时发送消息?MSMQ

你想使用nServiceBus,MassTransit,Rhino-ESB等吗?MSMQ

无论你选择什么,都要考虑的事情

你怎么知道队列的健康状况?这两个选项都以不同方式处理故 例如,Service Broker将在某些可能导致您的应用程序关闭的情况下禁用您的队列.

你将如何进行报道?如果您已经在报表中使用SQL表,那么Service Broker可以很容易地适应,因为它只是另一个动态表.如果您已经在使用性能监视器MSMQ可能更适合.Service Broker确实有很多性能计数器,因此不要让它成为您唯一的因素.

你如何衡量正常运行时间?它只是确保您不会丢失交易,还是需要同步响应?我发现MSMQ的分布式特性允许更长的正常运行时间,因为主队列可以脱机而不会丢失任何东西.而对于Service Broker,您的数据库必须在线,否则您将失败.

您是否已经拥有这些技术之一的经验?两者都有很多实现细节可以回来咬你.

无论您做出何种选择,切换底层排队技术有多容易?我建议您使用一个通用的IQueue接口来编写具体的实现.这样,如果您发现错误的选择,您可以在以后轻松更改您所做的选择.毕竟,队列只是一个队列,不应该将您锁定到特定的实现中.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有