当前位置: 首页 > news >正文

上海中远建设 网站/今日新闻头条新闻最新

上海中远建设 网站,今日新闻头条新闻最新,北京网站开发公司电话,品牌设计课程导读:本文主要涉及Service Broker的基本概念及建立一个Service Broker应用程序的基本步骤。一、前言:Service Broker为SQL Server提供消息队列,这提供了从数据库中发送异步事务性消息队列的方法。ServiceBroker消息可以保证以适当的顺序或原始…

导读:本文主要涉及Service Broker的基本概念及建立一个Service Broker应用程序的基本步骤。

一、前言:

Service Broker为SQL Server提供消息队列,这提供了从数据库中发送异步事务性消息队列的方法。Service

Broker消息可以保证以适当的顺序或原始的发送顺序不重复地一次性接收。并且因为内建在SQL

Server中,这些消息在数据库发生故障时是可以恢复的,也可以随数据库一起备份。在SQL Server 2008中,还引入了使用Create Broker

Priority命令对会话设定优先级,可以对重要的或不重要的会话进行优先级设定,以保证消息合理地处理。

本文假定一个在线数据库BookStore中存储了一些业务订单。我们使用Service

Broker应用程序将消息发送到另一个数据库BookDistribution,该数据库是分离的应用程序调用,该应用程序控制仓库入库和出库交付,

并返回消息给BookStore。

创建Service Broker应用程序大体步骤如下:

1、定义希望应用程序执行的异步任务。

2、确定Service Broker的发起方服务和目标服务是否创建在同一个SQL

Server实例中。如果是两个实例,实例间的通信还需要创建经过证书认证或NT安全的身份认证,并且要创建端点、路由以及对话安全模式。

3、如果没有启用,则在多方参与的数据库中使用Alter Database命令设置Enable_broker以及Truseworthy数据库选项。

4、为所有多方参与的数据库创建数据库主密钥。

5、创建希望在服务之间发送的消息类型。

6、创建契约(Contract)来定义可以由发起方发送的各种消息以及由目标发送的消息类型的种类。

7、同时在两方参与的数据库中创建用于保存消息的队列。

8、同时在绑定特定约定到特定队列的多方参与的数据库中创建服务。

二、实例

下面我们通过一个示例来实现以上步骤:

(一)、启用数据库的Service Broker活动

--Enabling Databases for Service Broker ActivityUSEmasterGOIFNOTEXISTS(SELECTnameFROMsys.databasesWHEREname='BookStore')CREATEDATABASEBookStoreGOIFNOTEXISTS(SELECTnameFROMsys.databasesWHEREname='BookDistribution')CREATEDATABASEBookDistributionGOALTERDATABASEBookStoreSETENABLE_BROKERGOALTERDATABASEBookStoreSETTRUSTWORTHYONGOALTERDATABASEBookDistributionSETENABLE_BROKERGOALTERDATABASEBookDistributionSETTRUSTWORTHYON

(二)、创建数据库主密钥

--Creating the DatabaseMaster Key for EncryptionUSEBookStoreGOCREATEMASTERKEYENCRYPTIONBYPASSWORD='I5Q7w1d3'GOUSEBookDistributionGOCREATEMASTERKEYENCRYPTIONBYPASSWORD='D1J3q5z8X6y4'GO

(三)、管理消息类型

--Managing Message TypesUseBookStoreGO--发送图书订单的消息类型CREATEMESSAGE TYPE[//SackConsulting/SendBookOrder]VALIDATION=WELL_FORMED_XMLGO--目标数据库发送的消息类型CREATEMESSAGE TYPE[//SackConsulting/BookOrderReceived]VALIDATION=WELL_FORMED_XMLGO--执行同样的定义UseBookDistributionGO--发送图书订单的消息类型CREATEMESSAGE TYPE[//SackConsulting/SendBookOrder]VALIDATION=WELL_FORMED_XMLGO--目标数据库发送的消息类型CREATEMESSAGE TYPE[//SackConsulting/BookOrderReceived]VALIDATION=WELL_FORMED_XMLGO

--注意,此处没有定义消息的内容。实际的消息是消息类型的实例。

(四)、创建契约(Contract)

--Creating ContractsUseBookStoreGOCREATECONTRACT[//SackConsulting/BookOrderContract]([//SackConsulting/SendBookOrder]SENTBYINITIATOR,[//SackConsulting/BookOrderReceived]SENTBYTARGET

)GOUSEBookDistributionGOCREATECONTRACT[//SackConsulting/BookOrderContract]([//SackConsulting/SendBookOrder]SENTBYINITIATOR,[//SackConsulting/BookOrderReceived]SENTBYTARGET

)GO

--发起方和目标的定义必须相同

(五)、创建队列

--Creating QueuesUseBookStoreGO--保存BookDistribution过来的消息CREATEQUEUE BookStoreQueueWITHSTATUS=ONGOUSEBookDistributionGO--保存BookStore过来的消息CREATEQUEUE BookDistributionQueueWITHSTATUS=ONGO

(六)、创建服务

服务定义端点,然后使用它来将消息队列绑定到一个或多个契约上。服务使用队列和契约来定义一个或一组任务。有点拗口,是不是?

服务是消息的发起方和接收方强制约定的规则,并将消息路由到正确的序列。

--Creating ServicesUseBookStoreGOCREATESERVICE[//SackConsulting/BookOrderService]ONQUEUE dbo.BookStoreQueue--指定的队列绑定到契约([//SackConsulting/BookOrderContract])GOUSEBookDistributionGOCREATESERVICE[//SackConsulting/BookDistributionService]ONQUEUE dbo.BookDistributionQueue--指定的队列绑定到契约([//SackConsulting/BookOrderContract])GO

(七)、启动对话

对话会话(dialog conservation)是在服务之间进行消息交换的操作。

--Initiating a DialogUseBookStoreGO--保存会话句柄和订单信息DECLARE@Conv_HandleruniqueidentifierDECLARE@OrderMsgxml;BEGINDIALOG CONVERSATION@Conv_Handler--创建会话FROMSERVICE[//SackConsulting/BookOrderService]TOSERVICE'//SackConsulting/BookDistributionService'ONCONTRACT[//SackConsulting/BookOrderContract];SET@OrderMsg='

';

SENDONCONVERSATION@Conv_Handler--发送到BookDistribution数据库的队列中MESSAGE TYPE[//SackConsulting/SendBookOrder](@OrderMsg);

(八)、查询队列中传入的消息

--Querying the Queue for IncomingMessagesUSEBookDistributionGOSELECTmessage_type_name,CAST(message_bodyasxml) message,

queuing_order, conversation_handle, conversation_group_idFROMdbo.BookDistributionQueue

查询结果:

2011-4-5%2015-34-16.png?psid=1

(九)、检索并响应消息

使用Receive语句(http://msdn.microsoft.com/en-us/library/ms186963.aspx)从队列中读取行(消息),也可以删除已经读取的消息。Receive的结果可以填充到常规表中,也可以在局部变量中执行其他操作,或发送到其他service

Broker消息。如果消息是XML数据类型的消息,则可以直接借助TSQL的XQuery来操作。

--Receiving and Responding to aMessageUSEBookDistributionGO--创建一个表存放接收到的订单信息CREATETABLEdbo.BookOrderReceived

(BookOrderReceivedIDintIDENTITY(1,1)NOTNULL,

conversation_handleuniqueidentifierNOTNULL,

conversation_group_iduniqueidentifierNOTNULL,

message_body xmlNOTNULL)GO--声明变量DECLARE@Conv_HandleruniqueidentifierDECLARE@Conv_GroupuniqueidentifierDECLARE@OrderMsgxmlDECLARE@TextResponseMsgvarchar(8000)DECLARE@ResponseMsgxmlDECLARE@OrderIDint;--从队列中获取消息,将接收值赋于局部变量RECEIVETOP(1)@OrderMsg=message_body,--TOP指定最多一条消息@Conv_Handler=conversation_handle,@Conv_Group=conversation_group_idFROMdbo.BookDistributionQueue;--将变量值插入表中INSERTdbo.BookOrderReceived

(conversation_handle, conversation_group_id, message_body)VALUES(@Conv_Handler,@Conv_Group,@OrderMsg)--使用XQuery进行抽取以响应消息订单SELECT@OrderID=@OrderMsg.value('(/order/@id)[1]','int')SELECT@TextResponseMsg='';SELECT@ResponseMsg=CAST(@TextResponseMsgasxml);--使用既有的会话句柄,发送响应消息到发起方SENDONCONVERSATION@Conv_HandlerMESSAGE TYPE[//SackConsulting/BookOrderReceived]

(十)、结束会话

--Ending a ConversationUSEBookStoreGO--创建订单确认表CREATETABLEdbo.BookOrderConfirmation

(BookOrderConfirmationIDintIDENTITY(1,1)NOTNULL,

conversation_handleuniqueidentifierNOTNULL,

DateReceiveddatetimeNOTNULLDEFAULTGETDATE(),

message_body xmlNOTNULL)DECLARE@Conv_HandleruniqueidentifierDECLARE@Conv_GroupuniqueidentifierDECLARE@OrderMsgxmlDECLARE@TextResponseMsgvarchar(8000);

RECEIVETOP(1)@Conv_Handler=conversation_handle,@OrderMsg=message_bodyFROMdbo.BookStoreQueueINSERTdbo.BookOrderConfirmation

(conversation_handle, message_body)VALUES(@Conv_Handler,@OrderMsg);ENDCONVERSATION@Conv_Handler;GOUSEBookDistributionGODECLARE@Conv_HandleruniqueidentifierDECLARE@Conv_GroupuniqueidentifierDECLARE@OrderMsgxmlDECLARE@message_type_namenvarchar(256);

RECEIVETOP(1)@Conv_Handler=conversation_handle,@OrderMsg=message_body,@message_type_name=message_type_nameFROMdbo.BookDistributionQueue--双方必须都结束会话IF@message_type_name='http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog'BEGINENDCONVERSATION@Conv_Handler;END

--查询会话状态

SELECTstate_desc, conversation_handleFROMsys.conversation_endpoints

83bdeff86df3206c99ae6df6f114534c.png

三、小结

本文通过一个实例演示了一个用来发送图书订单消息分发控制数据库的简单的消息交换应用程序。发起方发送图书订单,发回一个响应,并在两个数据库上使用END

Conservation结束会话。现实场景中可以转换为其他消息类型、契约、服务和队列。合理运用Service

Broker应用程序的异步特性可以防止因应用程序挂起而导致业务系统产生瓶颈。

本文参考:

1、SQL Server 2005 Service Broker 初探

2、SQL Server 2008 Transact-SQL Recipes: A Problem-Solution Approach

Service Broker

http://www.lbrq.cn/news/1543267.html

相关文章:

  • 黑白网站模板/互联网广告精准营销
  • 网站建设项目国内外分析报告/html网页制作
  • 云南网络宣传公司/免费的seo优化
  • 北京西站疫情防控最新消息/石家庄谷歌seo
  • 威海城市 建设信息网站/软文营销文案
  • 日本做设计的网站有哪些方面/短信营销平台
  • 邯郸企业做网站费用/百度seo关键词排名查询
  • 鞋网站建设方案/网络推广公司官网
  • 网站里面的链接怎么做的/seo快速排名
  • 杭州滨江网站开发/产品策划推广方案
  • 新能源汽车十大名牌/吴中seo页面优化推广
  • 山西seo排名/seo平台优化服务
  • 佛山网站建设哪个好点/怎样推广自己的产品
  • 重庆高端网站设计公司/苏州市网站
  • 制作企业网站html/百度榜单
  • 专业做酒店装修的公司/怎么做网络推广优化
  • 网站开发公司所需投入资源/微信软文范例大全100
  • wordpress 知识库/开封网站seo
  • wordpress emlog zblog/威海seo优化公司
  • 宁波企业网站建站/商业网站
  • 网站标签优化/大的网站建设公司
  • 做网站时怎么裁切存图/上海app网络推广公司
  • 设计app/seo引擎优化外包
  • 企业做网站公司有哪些/贺贵江seo教程
  • 如何汉化wordpress/seo搜索引擎优化价格
  • a做爰网站/百度推广怎么做免费
  • 网站开发 平台建设/凡科建站和华为云哪个好
  • 好学校平台网站模板下载不了/网站优化 推广
  • 网站后台超链接怎么做/网推拉新app推广接单平台
  • 黑龙江省建设工程网/武汉网站搜索引擎优化
  • 计算机视觉(二)------OpenCV图像视频操作进阶:从原理到实战
  • 哈希:两数之和
  • 数字孪生 :提高制造生产力的智能方法
  • JavaSE高级-02
  • RecSys:排序中的融分公式与视频播放建模
  • 飞算JavaAI家庭记账系统:从收支记录到财务分析的全流程管理方案