在sqlserver2005中使用队列servicebroker内部激活

在sqlserver2005中使用队列servicebroker内部激活

ID:34753495

大小:103.68 KB

页数:7页

时间:2019-03-10

在sqlserver2005中使用队列servicebroker内部激活_第1页
在sqlserver2005中使用队列servicebroker内部激活_第2页
在sqlserver2005中使用队列servicebroker内部激活_第3页
在sqlserver2005中使用队列servicebroker内部激活_第4页
在sqlserver2005中使用队列servicebroker内部激活_第5页
资源描述:

《在sqlserver2005中使用队列servicebroker内部激活》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、在SQLServer2005中使用队列ServiceBroker内部激活http://hi.baidu.com/yandavid/blog/item/4ed0a97e0ae8de320dd7da53.html用存储过程调用ServiceBroker提交消息队列,再调用存储过程处理消息的方法.ServiceBroker组件—在数据库引擎中建立异步消息应用程序的SQLServer2005新特性。在本文中,我将带领你建立一个小型的ServiceBroker应用程序,它使用内部激活(InternalActivation

2、)来处理所提交的消息。内部激活的优点在ServiceBroker应用程序中,你可以指定一个存储过程,只要有消息到达一个队列,就立即执行它。在某种程度上,它就像队列中的异步触发器。使用这种技巧的优点在于,如果你的队列由于收到大量消息而陷入困境,你可以对队列进行设置,使它启动更多存储过程实例。我认为这是ServiceBroker应用程序的一项非常重要的功能,因此我将在下面的例子中分析内部激活的运行机制。消息应用程序的目的是帮助你发送一条消息,并继续进行你的工作。如果从触发器中调用存储过程,就需要在触发器下次激活前插

3、入记录。如果触发器要完成许多处理工作,这肯定会造成系统瓶颈。但是,如果你只使用存储过程向队列传送消息,触发器就可以迅速地完成处理工作,而且可以在后台完成这些工作。ServiceBroker是基于数库的一个消息平台,可以实现数据库级的异步消息通信,也可以实现数据库发生变化主动通知道应用程序,给SOA也就提供了更多的一个选择,但是它的缺点就是效率没有MSMQ高,在使用它时需跟据使用要求的情况选择,选择它理由是当消息需要保证其安全、可靠传递、接收顺序时那它是一个比较好的选择而且可以降低开发难度,因为MSMQ保证消息一

4、定能到达目的地、安全、接收的先后顺序都需要自已做处理,而这些处理都非常的难以控制,而且效果不一定是那么的理想。队列可以存储消息。一个服务的消息到达时,ServiceBroker会将该消息放入与该服务关联的队列中。*队列可以是SELECT语句的目标。但是,只能使用在ServiceBroker会话中运行的语句(如SEND、RECEIVE和ENDCONVERSATION)来修改队列的内容。队列不能是INSERT、UPDATE、DELETE或TRUNCATE语句的目标。*队列不能是临时对象。所以,以#开头的队列名称是无

5、效的名称。*以不可用状态创建队列,可以先准备好服务的基础结构,然后再允许在队列中接收消息。*如果队列中没有消息,ServiceBroker不会停止激活存储过程。如果队列中暂时没有可用消息,应退出激活存储过程。*检查激活存储过程的权限的时间是在ServiceBroker激活存储过程时,而不是在创建队列时。CREATEQUEUE语句不验证EXECUTEAS子句中指定的用户是否有权限执行PROCEDURENAME子句中指定的存储过程。*队列不可用时,ServiceBroker将在数据库的传输队列中保存使用该队列的服务

6、的消息。目录视图sys.transmission_queue可以提供传输队列的视图。*队列是一种属于架构的对象。队列显示在目录视图sys.objects中。/*=====================================  ServiceBroker的实现使用应用程序(ADO.NET2.0)与ServiceBroker进行通信的时候需要注意的几个问题:1.启用数据库的Enable_Borker通过alterdatabase来启动。2.配置数据库(sp_configure)中的选项[clrenabl

7、ed]设为1,这个是启用“加载CLR”,启用它的因原是:当消息到达该SERVICE的队列时,与队列关联的sp_DispatcherProc系统存储过程自动对消息进行处理,而该存储过程使用了.NET编写的代码。需要注意(微软官方文档中提到)的是[clrenabled]和[lightweightpooling]项是有冲途的,当[lightweightpooling]启用时是不支持CLR的,所以必须将其禁用。3.需要受权给订阅查询的账户:GRANTSUBSCRIBEQUERYNOTIFICATIONSTO[user]

8、4.登录用户必须映射数据库用户。5.ADO.NET使用System.Data.SqlClient.SqlDependency中的Start方法启动订阅。测试示例代码。注:sql语句中的查询必须在表前面加上表所在的架构“[schema_name].[table_name]”,查询中必须显示指定返回的列,不能用"*"号代替。=================================

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。