国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

SSB(SQLservice Service Broker) 入門實例介紹

2024-08-31 00:44:08
字體:
來源:轉載
供稿:網友

step 1:perpar database & data

復制代碼 代碼如下:


use master
go
Create database Inventory
go
use Inventory
go
Create table inventory
(
TitleId nvarchar(6) not null,
Quantity int not null,
primary key (TitleId,Quantity)
);
go

insert inventory values ('pc1001',100);
insert inventory values ('pc1002',200);
insert inventory values ('pc1003',300);
insert inventory values ('pc1004',400);



step 2: 創建整個SSB的基礎框架.

首先創建信息類型

復制代碼 代碼如下:


Create Message Type [//mark/v10/types/inventory]
Create Message Type [//mark/v10/types/inventoryresponse]


創建合約

復制代碼 代碼如下:


Create contracts [//mark/v10/contracts/inventorycontract]
(
[//mark/v10/types/inventory] send by initiator,
[//mark/v10/types/inventoryresponse] send by target
);



創建隊列與服務

復制代碼 代碼如下:


create queue [inventory client queue];
create service [//mark/v10/services/inventory client]
on queue [inventory client queue]

go
--create inventory service
create queue [inventory queue];
create service [//mark/v10/services/inventory]
on queue [inventory queue]
(
[//mark/v10/contracts/inventorycontract]
);



step 3:發送消息到消息隊列中

復制代碼 代碼如下:


use Inventory
go
--send message
begin transaction
declare @dialog_id uniqueidentifier
begin dialog conversation @dialog_id
from service [//mark/v10/services/inventory client]
to service '//mark/v10/services/inventory'
on contract [//mark/v10/contracts/inventorycontract]
with encryption = off;
send on conversation @dialog_id message type [//mark/v10/types/inventory]
(
'<InventoryUpdate>
<TitleId>pc1001</TitleId>
<Quantity>102</Quantity>
</InventoryUpdate>'
);
commit transaction;


發送成功后,可以查詢 inventory_queue

復制代碼 代碼如下:


select conversation_handle, cast(message_body as xml) as conversation_body from [Inventory queue]


這里只是查詢了兩列。

其中conversation_body 就是 我們發出的信息了。

setp 4: 從 inventory queue 中獲取信息并更新數據

復制代碼 代碼如下:


use inventory
go
begin transaction
declare @dialog_id uniqueidentifier
declare @message_body xml
declare @amount int;
declare @title nvarchar(128);

receive
@dialog_id = conversation_handle,
@message_body = message_body
from [dbo].[Inventory queue]

print 'handle is' + cast(@dialog_id as nvarchar(90))
print 'message body is' + cast(@message_body as nvarchar(max) )
if(@dialog_id is not null)
begin
set @amount = @message_body.value('(/InventoryUpdate/Quantity)[1]','int');
set @title = @message_body.value('(/InventoryUpdate/TitleId)[1]','nvarchar(100)');
print 'a:'+cast(@amount as nvarchar(100))
print 'b:'+@title;

Update inventory set Quantity = @amount where TitleId = @title;
end
end conversation @dialog_id;
commit transaction;


操作成功后再去查詢inventory queue的表 猶豫里面的數據已經被receive 出來 就為空了。

數據同時被更新了

SSB(SQLservice Service Broker) 入門實例介紹



step 5: 接下來做個自動監聽功能,只要有信息發送到隊列,相關隊列,就可以自動執行功能.

首先建立個存儲過程,(把receive 中的那段代碼拿過來就可以了)

復制代碼 代碼如下:


use Inventory
go
--create procedure to receive message and update table
create proc InventoryProc as

begin transaction
declare @dialog_id uniqueidentifier
declare @message_body xml
declare @amount int;
declare @title nvarchar(128);

waitfor(
receive
@dialog_id = conversation_handle,
@message_body = message_body
from [dbo].[Inventory queue]),timeout 5000;

print 'handle is' + cast(@dialog_id as nvarchar(90))
print 'message body is' + cast(@message_body as nvarchar(max) )
if(@dialog_id is not null)
begin
set @amount = @message_body.value('(/InventoryUpdate/Quantity)[1]','int');
set @title = @message_body.value('(/InventoryUpdate/TitleId)[1]','nvarchar(100)');
print 'a:'+cast(@amount as nvarchar(100))
print 'b:'+@title;

Update inventory set Quantity = @amount where TitleId = @title;
end
end conversation @dialog_id;
commit transaction;
go


隊列監聽

復制代碼 代碼如下:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乾安县| 福建省| 当涂县| 西青区| 丹寨县| 秦皇岛市| 南宫市| 南澳县| 东阳市| 锡林郭勒盟| 长葛市| 壶关县| 巢湖市| 龙井市| 石泉县| 鄢陵县| 德安县| 兴山县| 昔阳县| 长治县| 尤溪县| 盈江县| 万山特区| 张家界市| 长寿区| 兴宁市| 绍兴市| 宁晋县| 六枝特区| 厦门市| 雷州市| 阿拉尔市| 余姚市| 永德县| 肇州县| 霞浦县| 浦县| 廊坊市| 荃湾区| 竹北市| 连平县|