成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Service Broker基礎應用(下)

數據庫 SQL Server
在上篇《SQL Server 2008中Service Broker基礎應用(上)》中,簡要介紹了Service Broker的一般步驟,本文繼續介紹Service Broker的設置會話優先級,存儲過程中實現。

導讀:在上篇《SQL Server 2008中Service Broker基礎應用(上)》中,簡要介紹了Service Broker的一般步驟,本文繼續介紹Service Broker的設置會話優先級,存儲過程中實現。

一、Service Broker的設置會話優先級

自SQL Server 2008起,對非常活躍的Service Broker應用程序,提供了設置優先級的命令CREATE BROKER PRIORITY(http://msdn.microsoft.com/en-us/library/bb934170.aspx)。通過該命令,可以設置從1至10共10個等級的顆粒度來調試會話的優先級,默認為5。在此之前,你必須得首先打開HONOR_BROKER_PRIORITY開關。

-- 設置會話優先級

--啟用會話優先級選項
ALTER DATABASE BookStore
SET HONOR_BROKER_PRIORITY ON

--啟用會話優先級選項
ALTER DATABASE BOOKDistribution
SET HONOR_BROKER_PRIORITY ON

--查看設置結果
SELECT name, is_honor_broker_priority_on
FROM sys.databases
WHERE name IN ('BookStore', 'BookDistribution')

/*
name is_honor_broker_priority_on
BookStore 1
BookDistribution 1
*/

USE BookStore
GO
CREATE BROKER PRIORITY Conv_Priority_BookOrderContract_BookOrderService
FOR CONVERSATION
SET (CONTRACT_NAME = [//SackConsulting/BookOrderContract],--特定的契約
LOCAL_SERVICE_NAME = [//SackConsulting/BookOrderService],--本地服務
REMOTE_SERVICE_NAME = ANY,--遠程服務為ANY,即Service Broker端點的任何相關服務
PRIORITY_LEVEL = 10)--設置優先級為10 

通過sys.conversation_priorities目錄視圖,查詢優先級

SELECT name, priority, service_contract_id,
local_service_id,remote_service_name
FROM sys.conversation_priorities cp

/*
name priority service_contract_id local_service_id remote_service_name
Conv_Priority_BookOrderContract_BookOrderService 10 65536 65536 NULL
*/

如果你希望包含服務和契約名稱,可以將服務和從sys.conversation_priorities(http://msdn.microsoft.com/zh-cn/library/bb895280%28v=sql.100%29.aspx)返回的契約ID與sys.service_contracts(http://msdn.microsoft.com/en-us/library/ms184378.aspx),sys.services(http://msdn.microsoft.com/en-us/library/ms174429.aspx)目錄視圖關聯起來。

USE BookDistribution
GO
--創建目標服務的優先級,與發起方的優先級保持一致,
--
以使會話的優先級設置覆蓋整個會話的生命周期

CREATE BROKER PRIORITY Conv_Priority_BookOrderContract_BookDistributionService
FOR CONVERSATION
SET (CONTRACT_NAME = [//SackConsulting/BookOrderContract],
LOCAL_SERVICE_NAME
= [//SackConsulting/BookDistributionService],
REMOTE_SERVICE_NAME
= ANY,
PRIORITY_LEVEL
= 10)

USE BookStore
GO
ALTER BROKER PRIORITY Conv_Priority_BookOrderContract_BookOrderService
FOR CONVERSATION
SET (REMOTE_SERVICE_NAME = '//SackConsulting/BookDistributionService')
--修改遠程服務名稱

ALTER BROKER PRIORITY Conv_Priority_BookOrderContract_BookOrderService
FOR CONVERSATION
SET (PRIORITY_LEVEL = 9)
--設置優先級

--刪除優先級設置
DROP BROKER PRIORITY Conv_Priority_BookOrderContract_BookOrderService

二、Service Broker的存儲過程實現

在上文中,我們使用的臨時T-SQL來演示Service broker的步驟,事實上, 我們完全可以通過存儲過程或外部應用程序自動激活并處理隊列中的消息。使用Create Queue(http://msdn.microsoft.com/en-us/library/ms190495.aspx)和Alter Queue(http://msdn.microsoft.com/en-us/library/ms189529.aspx)選項,也可以指定可以激活并處理在同一隊列中傳入的消息的、同時執行的相同服務程序的數量。

繼續上文的示例:

-- Creating the Bookstore Stored Procedure

USE BookDistribution
GO
CREATE PROCEDURE dbo.usp_SB_ReceiveOrders
AS
DECLARE @Conv_Handler uniqueidentifier
DECLARE @Conv_Group uniqueidentifier
DECLARE @OrderMsg xml
DECLARE @TextResponseMsg varchar(8000)
DECLARE @ResponseMsg xml
DECLARE @Message_Type_Name nvarchar(256);
DECLARE @OrderID int;

-- XACT_ABORT automatically rolls back the transaction when a runtime error occurs
SET XACT_ABORT ON

BEGIN TRAN;

RECEIVE
TOP(1) @OrderMsg = message_body,
@Conv_Handler = conversation_handle,
@Conv_Group = conversation_group_id,
@Message_Type_Name = message_type_name
FROM dbo.BookDistributionQueue;

IF @Message_Type_Name = '//SackConsulting/SendBookOrder'
BEGIN
INSERT dbo.BookOrderReceived
(conversation_handle, conversation_group_id, message_body)
VALUES
(
@Conv_Handler,@Conv_Group, @OrderMsg )
SELECT @OrderID = @OrderMsg.value('(/order/@id)[1]', 'int' )
SELECT @TextResponseMsg =
'<orderreceived id= "' +
CAST(@OrderID as varchar(10)) +
'"/>';
SELECT @ResponseMsg = CAST(@TextResponseMsg as xml);
SEND
ON CONVERSATION @Conv_Handler
MESSAGE TYPE
[//SackConsulting/BookOrderReceived]
(
@ResponseMsg );
END

IF @Message_Type_Name = 'http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog'
BEGIN
END CONVERSATION @Conv_Handler;
END
COMMIT TRAN
GO

解析:該存儲過程包含處理//SackConsulting/SendBookOrder和http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog消息類型的邏輯。如果發送發后者,特定會話的句柄的特定會話會結束。如果接收到圖書訂單消息類型,它的消息將插入到表中,并且返回訂單確認信息。

可以使用Alter Queue命令修改既有的隊列。這個命令使用與Create Queue相同的選項,它允許改變隊列的狀態與保持期、待激活的存儲過程、隊列讀取存儲過程實例的最大數量以及過程的安全模式契約。

Alter Queue包括一個額外的參數Drop,它用來刪除隊列的所有存儲過程激活設置。

使用Alter Queue命令將存儲過程綁定到既有的隊列:

----使用Alter Queue命令將存儲過程綁定到既有的隊列
ALTER QUEUE dbo.BookDistributionQueue
WITH ACTIVATION (STATUS = ON,
PROCEDURE_NAME
= dbo.usp_SB_ReceiveOrders,
MAX_QUEUE_READERS
= 2,--獨立處理隊列中不同消息的同一存儲過程同時執行的最大數量
EXECUTE AS SELF)--即存儲過程將以與執行Alter Queue命令的主體的相同的權限來執行

為了測試BookStore數據庫的新服務程序,開始一個會話并設置新順序:

Use BookStore
GO

DECLARE @Conv_Handler uniqueidentifier
DECLARE @OrderMsg xml;

BEGIN DIALOG CONVERSATION @conv_handler
FROM SERVICE [//SackConsulting/BookOrderService]
TO SERVICE '//SackConsulting/BookDistributionService'
ON CONTRACT [//SackConsulting/BookOrderContract];

SET @OrderMsg =
'<order id="3490" customer="29" orderdate="7/22/2008">
<LineItem ItemNumber="1" ISBN="1-59059-592-0" Quantity="2" />
</order>
';

SEND
ON CONVERSATION @Conv_Handler
MESSAGE TYPE
[//SackConsulting/SendBookOrder]
(
@OrderMsg);

當隊列Status=ON并且隊列中到到達新消息時,執行存儲過程來處理傳入的消息。可以使用存儲過程或外部程序,但使用存儲過程的好處是,它們提供了處理消息、自動執行所有需要的響應和相關業務任務的簡單的封裝好的組件。

如果在目標隊列上有存儲過程被執行,并且激活新的接收到的消息,那么應該已經有訂單確認消息返回到dbo.BookStoreQueue:

SELECT conversation_handle, CAST(message_body as xml) message
FROM dbo.BookStoreQueue
/*
conversation_handle message
A7B7FA73-5B5F-E011-8B4E-001C23FA56DD <orderreceived id="3439" />
*/

小結:

本文主要介紹Service Broker的設置會話優先級,存儲過程中實現。下文將介紹Service broker的遠程實現。

原文鏈接:http://www.cnblogs.com/downmoon/archive/2011/04/12/2013333.html

【編輯推薦】

  1. Service Broker基礎應用(上)
  2. 簡述Service Broker事件通知功能
  3. 一個Excel導入SQL Server的例子
  4. 優化你的DiscuzNT,讓它跑起來
  5. 淺述當前模式讀與一致性讀的區別
責任編輯:艾婧 來源: 博客園
相關推薦

2011-05-06 15:37:10

Service BroSQL Server

2015-03-30 15:15:00

CloudFoundrPaaS開源

2011-05-06 15:00:52

Service BroSQL Server

2011-05-06 15:54:47

Service BroSQL Server

2021-06-02 08:07:59

LinuxService應用

2015-03-30 14:57:03

paascloudfoundrservice bro

2011-08-29 11:25:29

清空service bSQL Server

2011-07-06 15:36:31

ASP

2022-05-02 16:18:22

RocketMQBrokertopic

2011-04-15 09:33:24

NAT

2015-08-07 10:00:58

Windows 10Service Rel

2014-06-05 10:21:29

HTTP

2020-12-22 06:05:43

Mbedtls應用基礎

2010-06-13 15:28:56

UML基礎與應用

2015-01-12 13:48:55

Android應用組件

2022-08-31 09:21:40

MQTT BrokeOthers

2021-03-15 09:44:39

Broker源碼RocketMQ

2016-07-29 10:37:00

互聯網httphtml

2009-07-15 13:08:25

MyEclipse C

2009-05-28 13:27:33

Windows CE
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品视频在线观看免费 | 野狼在线社区2017入口 | 欧美美女被c | 日本不卡一区二区三区在线观看 | 亚洲a毛片 | 国产精品美女 | 日韩欧美亚洲 | 欧美一级黄色网 | 91资源在线观看 | 国产成人精品一区二区 | 久久久久久久一区 | 日韩成人在线视频 | 国产视频中文字幕 | 欧美视频一区二区三区 | 国产精品自产av一区二区三区 | 99re视频这里只有精品 | 久久国产一区 | 999久久久 | 台湾a级理论片在线观看 | 日本特黄a级高清免费大片 成年人黄色小视频 | 国产精品成人一区 | 视频一区二区在线观看 | 日韩精品一区二区三区中文字幕 | 国产在线精品免费 | 99视频免费在线观看 | 色婷婷激情综合 | 在线免费黄色 | 精品91久久久 | 狠狠躁18三区二区一区 | 国产1区2区| 九九久视频 | 欧美精三区欧美精三区 | 成人精品一区二区户外勾搭野战 | 久久综合九色综合欧美狠狠 | 一区二区三区小视频 | 精品欧美激情在线观看 | 三级特黄特色视频 | 亚洲精品国产第一综合99久久 | 99久久精品免费看国产高清 | 亚洲精品久久久久久久久久久久久 | 国产成人一区二区 |