配置SQL Server Service Broker来发送存储过程数据(上)

 
   | |

导读:本部分介绍了在SQL Server 2005中,配置Service Broker发送和接收消息的四个步骤。

关键词:SQL Server 2005 Service Broker 微软 XML MSMQ

正在加载数据... 【TechTarget中国原创】在SQL Server 2005中,微软引进了一个令人兴奋的新功能,即Service Broker,这对于许多管理员来说都是一个新的概念。这个概念,跨进程消息,是一个开发人员多年来一直在如Microsoft Message Queue (MSMQ)的产品中使用的应用。为了作好准备,必须运行一个SQL Server命令,并且必须对命令返回的数据进行处理。然而,它并不需要立刻进行处理,因为用户并不预期命令中有任何输出。这就是消息队列。

【TechTarget中国原创】在SQL Server 2005中,微软引进了一个令人兴奋的新功能,即Service Broker,这对于许多管理员来说都是一个新的概念。这个概念,跨进程消息,是一个开发人员多年来一直在如Microsoft Message Queue (MSMQ)的产品中使用的应用。为了作好准备,必须运行一个SQL Server命令,并且必须对命令返回的数据进行处理。然而,它并不需要立刻进行处理,因为用户并不预期命令中有任何输出。这就是消息队列。

  正常情况下,当用户在SQL Server上启动一个存储过程时,他们必须等待存储过程来完成数据处理,然后才进行下一个动作。通过使用Service Broker,它们稍候可以将数据处理放到队列中留到后面执行。在这种情况下,用户将运行一个存储过程,但是,与数据处理不同,我们将输入数据打包为一个消息,并将这个消息发送到队列中。我们可以配置队列自动地读取消息并在消息中处理数据。

  消息可以在同一个数据库、同一台服务器上的数据库之间、或者服务器之间包括因特网上的服务器之间进行发送。这个过程有点类似电子邮件。当我给我的朋友发送一封电子邮件,他会接收然后读取邮件(处理消息),然后根据内容作一些回复。Service Broker就是以非常类似的方式进行工作。

  配置Service Broker发送和接收消息的4个步骤:

  我们必须配置几个Service Broker组件才能进行实际的消息发送和接收。比如,我们将把消息放到一个队列上进行自动处理。这些消息的处理可以是自动的,或者由一个Windows应用或者服务要求来从队列上读取消息。

  与其它对象相似,Service Broker名称在数据库中必须是唯一的。然而,如果我们将在服务器之间发送消息,那么我们配置Service Broker对象名称必须更加小心。一般我们建议将一些系统名称和方法名称组合起来加入到Service Broker对象名称中。这样就可以确保对象名称在我们的企业中是唯一的。这样当我们开始在内部使用了Service Broker来在系统之间发送消息,同时还想避免对象命名问题时,一切将变得很方便。尝试使用一个UNC风格的命名来确保唯一性。例如,我们将从tcp://SearchSQLServer/对象名称开始着手。

  1、我们在Service Broker首先必须配置的是消息类型(Message Type),它会告诉SQL Server关于消息内部的基本信息。Service Broker消息可以是任意类型的数据;文本、二进制、XML、数字等等。建议使用XML,因为它允许发送任何其它的数据类型。我们使用CREATE MESSAGE TYPE命令来创建消息类型。其中有4种验证可供选择。如果要加强XML模式验证,可以选择WELL_FORMED_XML或者VALID_XML WITH SCHEMA COLLECTION(使用XSD来强化XML模式)。


 CREATE MESSAGE TYPE [tcp://SearchSQLServer/SampleMessageType]AUTHORIZATION
  dbo
  VALIDATION = NONE

  2、我们需要安装的下一个对象是协定(Contract)。协定会告诉SQL Server消息类型之间的关系。就我个人而言,我喜欢让工作简单点,而喜欢在特定过程中的所有通信使用同一个消息类型。然而,Microsoft SQL Server Books OnLine例子则是对于发送系统使用一个消息类型而接收系统则使用另一个消息类型。

CREATE CONTRACT [tcp://SearchSQLServer/SampleContract] AUTHORIZATIONdbo
  (
  [tcp://SearchSQLServer/SampleMessageType] SENT BY ANY
  )

  3、现在,我们来到Service Broker的实际队列了。队列有点类似于一个表单。这就是消息在等待处理时被存储的地方。与表单不同的是,我们无法定义队列的模式。因此,建议使用XML来发送数据,因为我们可以在XML中定义模式。


 CREATE QUEUE [tcp://SearchSQLServer/SampleQueue] AUTHORIZATION dbo

  下一个配置的Service Broker对象是服务(Service)。这个服务是Service Broker在数据库中用以传输消息到正确的队列的,同时将协定捆绑在队列消息上。


 CREATE SERVICE [tcp://SearchSQLServer/SampleService] AUTHORIZATIONdbo
  ON QUEUE [tcp://SearchSQLServer/SampleQueue]
  (
  [tcp://SearchSQLServer/SampleContract]
  )

  4、最后一个对象是路由,它是可选的。路由只有我们在数据库服务器之间发送消息时才需要。路由被捆绑在接收消息的服务器本地拷贝上。如果接收消息的服务器被映射到使用数据库镜像的另外一台服务器上,那么我们就要使用MIRROR_ADDRESS参数。我们可以设置LIFETIME标记来让路由进行自动删除。


 CREATE ROUTE [tcp://SearchSQLServer/SampleRoute] AUTHORIZATION dbo
  WITH SERVICE_NAME = '[tcp://SearchSQLServer/SampleService]',
  BROKER_INSTANCE = 'AB2F3EB9-6662-4AAF-8682-A9A48C3BDD3B',
  ADDRESS = 'TCP://RemoteServer:8888',
  MIRROR_ADDRESS = 'TCP://MirrorServer:8888'
  The BROKER_INSTANCE parameter is the value of the service_broker_guid column from the sys.databases view of the database located on the remote server..

 
查看全文
 
 
 
 
 

SQL Server存储过程

 
如果你对SQLServerPedia这个网站有所了解,那么就会发现在这里你能够找到很多自定义函数,几乎可以用在任何情况下。
 
如果你是一个SQL Server工程师,正在寻找一种可以让你的数据库跟Twitter进行对话的一条捷径。那么,一个第三方程序Tweet-SQL是不错的选择。
 
创建一个触发器可以保持两个独立数据库表的一致性,在更改被应用之前,是否有方法可以让触发器验证其它数据库/表中不存在的更新,专家给出了解答。
 
如何为INSERT查询编写一个存储过程并在CS文件中检索受影响的行,专家Denny Cherry将给出具体的实现代码。
 
本文中我们将讨论在迁移数据库中,如何应用存储过程来发挥SQL Server 2005中的功能特性,同时又不与现有函数发生冲突。
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录