|
導(dǎo)讀:本文主要涉及Service Broker的基本概念及建立一個(gè)Service Broker應(yīng)用程序的基本步驟。
一、前言:
Service Broker為SQL Server提供消息隊(duì)列,這提供了從數(shù)據(jù)庫中發(fā)送異步事務(wù)性消息隊(duì)列的方法。Service Broker消息可以保證以適當(dāng)?shù)捻樞蚧蛟嫉陌l(fā)送順序不重復(fù)地一次性接收。并且因?yàn)閮?nèi)建在SQL Server中,這些消息在數(shù)據(jù)庫發(fā)生故障時(shí)是可以恢復(fù)的,也可以隨數(shù)據(jù)庫一起備份。在SQL Server 2008中,還引入了使用Create Broker Priority命令對(duì)會(huì)話設(shè)定優(yōu)先級(jí),可以對(duì)重要的或不重要的會(huì)話進(jìn)行優(yōu)先級(jí)設(shè)定,以保證消息合理地處理。
本文假定一個(gè)在線數(shù)據(jù)庫BookStore中存儲(chǔ)了一些業(yè)務(wù)訂單。我們使用Service Broker應(yīng)用程序?qū)⑾l(fā)送到另一個(gè)數(shù)據(jù)庫BookDistribution,該數(shù)據(jù)庫是分離的應(yīng)用程序調(diào)用,該應(yīng)用程序控制倉庫入庫和出庫交付, 并返回消息給BookStore。
創(chuàng)建Service Broker應(yīng)用程序大體步驟如下:
1、定義希望應(yīng)用程序執(zhí)行的異步任務(wù)。
2、確定Service Broker的發(fā)起方服務(wù)和目標(biāo)服務(wù)是否創(chuàng)建在同一個(gè)SQL Server實(shí)例中。如果是兩個(gè)實(shí)例,實(shí)例間的通信還需要?jiǎng)?chuàng)建經(jīng)過證書認(rèn)證或NT安全的身份認(rèn)證,并且要?jiǎng)?chuàng)建端點(diǎn)、路由以及對(duì)話安全模式。
3、如果沒有啟用,則在多方參與的數(shù)據(jù)庫中使用Alter Database命令設(shè)置Enable_broker以及Truseworthy數(shù)據(jù)庫選項(xiàng)。
4、為所有多方參與的數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫主密鑰。
5、創(chuàng)建希望在服務(wù)之間發(fā)送的消息類型。
6、創(chuàng)建契約(Contract)來定義可以由發(fā)起方發(fā)送的各種消息以及由目標(biāo)發(fā)送的消息類型的種類。
7、同時(shí)在兩方參與的數(shù)據(jù)庫中創(chuàng)建用于保存消息的隊(duì)列。
8、同時(shí)在綁定特定約定到特定隊(duì)列的多方參與的數(shù)據(jù)庫中創(chuàng)建服務(wù)。
二、實(shí)例
下面我們通過一個(gè)示例來實(shí)現(xiàn)以上步驟:
(一)、啟用數(shù)據(jù)庫的Service Broker活動(dòng)
-- Enabling Databases for Service Broker Activity
USE master
GO
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = 'BookStore')
CREATE DATABASE BookStore
GO
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = 'BookDistribution')
CREATE DATABASE BookDistribution
GO
ALTER DATABASE BookStore SET ENABLE_BROKER
GO
ALTER DATABASE BookStore SET TRUSTWORTHY ON
GO
ALTER DATABASE BookDistribution SET ENABLE_BROKER
GO
ALTER DATABASE BookDistribution SET TRUSTWORTHY ON
it知識(shí)庫:SQL Server 2008中Service Broker基礎(chǔ)應(yīng)用(上),轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。