我在那个需要触发的应用程序代码数据库的许多操作。 目前我使用的数据库查询,但我听说SQL Server服务代理可以给我MSMQ一样的功能。
- 我可以听的SQL Server Service Broker的队列从不同的机器上运行.NET应用程序?
- 如果是这样,我应该怎么办呢?
- 如果没有,你会推荐什么?
我在那个需要触发的应用程序代码数据库的许多操作。 目前我使用的数据库查询,但我听说SQL Server服务代理可以给我MSMQ一样的功能。
要回答你的问题:
我可以听的SQL Server Service Broker的队列从不同的机器上运行.NET应用程序?
是。
如果是这样,我应该怎么办呢?
如果没有,你会推荐什么?
您可以考虑使用SqlDependency
。 它使用服务代理在幕后,但没有明确。
您可以注册SqlDependency
有对象SELECT
查询或存储过程。 如果另一个命令改变了从查询返回的数据,那么事件将触发。 您可以注册事件处理程序,并运行你喜欢在那个时候任何代码。 或者,你可以使用SqlCacheDependency
,这将刚刚从缓存事件触发时删除相关的对象。
您也可以直接使用Service Broker的。 然而,在这种情况下,你将需要发送和接收自己的消息,与MSMQ。
在负载平衡的环境中, SqlDependency
有利于地方的代码需要每个Web服务器上(如清空缓存)运行情况。 Service Broker消息的代码比应该只运行一次 - 如发送电子邮件。
如果有帮助,我中详细讨论这两个系统在我的书(例子超快ASP.NET )。
SSB(SQL服务代理)有一个功能叫激活即启用了存储过程附加到一个队列。 当有消息在队列中消耗的SQL Server将在内部运行此程序。 队列连接的过程可以是一个CLR过程,使托管代码业务逻辑模块来运行(C#,VB.Net等)。
到内部活化存储过程的替代方案是在具有一个队列具有外部客户端“听” WAITFOR(RECEIVE ... )
语句。 这句法是专门为SSB和做了非池块,直到有消息收到。 应用然后消耗所接收的消息作为一个普通的T-SQL结果集(如SELECT)。 此外,还有一个的样品为Service Broker外部激活 ,它利用所述事件通知机制知道何时从一个队列消费消息启动的应用程序。
如果你想看到的T-SQL代码样本,充分利用SSB内部激活退房异步程序执行 。
一个简单的基于犀牛的队列使用队列库SQL服务代理
http://github.com/CoreyKaylor/servicebroker-queues