Jon*_*len 19 .net sql-server message-queue service-broker
我在数据库中有许多需要触发应用程序代码的操作.目前我正在使用数据库轮询,但我听说SQL Server Service Broker可以提供类似MSMQ的功能.
Rem*_*anu 18
SSB(SQL Service Broker)具有一个名为Activation的功能,可以将存储过程附加到队列.当队列中有消息消息时,SQL Server将在内部运行此过程.队列附加过程可以是CLR过程,使托管代码业务逻辑模块能够运行(C#,VB.Net etC).
内部激活的存储过程的替代方法是让外部客户端使用WAITFOR(RECEIVE ... )语句"侦听"队列.此语法对于SSB是特殊的,并且在有消息要接收之前执行非池化块.然后,应用程序将接收的消息作为普通的T-SQL结果集(如SELECT)使用.还有一个Service Broker外部激活器示例,它利用事件通知机制知道何时启动应用程序以消耗队列中的消息.
如果要查看利用SSB内部激活的T-SQL代码示例,请检查异步过程执行.
Ric*_*kNZ 12
回答你的问题:
我可以从在不同计算机上运行的.NET应用程序中侦听SQL Server Service Broker队列吗?
是.
如果是的话,我应该这样做吗?
如果没有,你会推荐什么?
你可以考虑使用SqlDependency.它在幕后使用Service Broker,但没有明确说明.
您可以SqlDependency使用SELECT查询或存储过程注册对象.如果另一个命令更改了查询返回的数据,则会触发一个事件.您可以注册一个事件处理程序,并在那时运行您喜欢的任何代码.或者,您可以使用SqlCacheDependency,这将在事件触发时从Cache中删除关联的对象.
您也可以直接使用Service Broker.但是,在这种情况下,您需要发送和接收自己的消息,就像使用MSMQ一样.
在负载平衡的环境中,SqlDependency适用于需要在每个Web服务器上运行代码的情况(例如刷新缓存).Service Broker消息对于代码来说比仅运行一次更好 - 例如发送电子邮件.
如果它有帮助,我会在我的书(Ultra-Fast ASP.NET)中使用示例详细介绍这两个系统.