SqlServer service broker 分布式系统(赵松涛)深入浅出 2005 数据库编程

1.创建测试数据库

create database ServerbrokerTest

on primary(

name=ServerbrokerTest_data,

filename=‘C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\ServerbrokerTest_data.mdf‘,

size=5,

maxsize=unlimited,

filegrowth=1

)

Log on

(

name=student_log,

filename=‘C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\ServerbrokerTest_log.ldf‘,

size=1,

maxsize=20,

filegrowth=3

)

2.激活数据库的broker功能

SELECT IS_BROKER_ENABLED FROM MASTER.SYS.DATABASES

WHERE NAME=‘ServerbrokerTest‘;

成功:,说明已经激活

若不成功: ALTER DATABASE DB_BROKERTEST SET ENABLE_BROKER  激活broker功能 将其激活

3.定义消息类型

--定义消息类型,必须是格式正确的xml

USE ServerbrokerTest

GO

CREATE MESSAGE TYPE

MessageTypeEMail --消息类型名

VALIDATION = WELL_FORMED_XML  --验证为标准xml格式

4.定义约定  定义约定名称为 ContractEMail 约定的所有者为dbo. SENT BY 用户指定哪个端点可以发送所指示的消息类型的消息.约定将记录服务可以用来拥有特定会话的消息.每个会话都有两个端点:发起方端点(启动会话的服务)和目标端点(发起方要联系的服务).ANY代表任意.

--定义约定(消息类型和传递方向)

USE ServerbrokerTest

GO

CREATE CONTRACT ContractEMail

AUTHORIZATION dbo

(MessageTypeEMail SENT BY ANY)

5.定义队列

--定义队列  消息发出队列

USE ServerbrokerTest

GO

CREATE QUEUE dbo.QueueSENDEMail

--定义队列  接收消息的队列

USE ServerbrokerTest

GO

CREATE QUEUE dbo.QueueRECEIVEEMail

6.定义服务

--定义服务,该服务为消息发出服务,使用消息发出队列

USE ServerbrokerTest

GO

CREATE SERVICE ServiceSendEMail

AUTHORIZATION dbo ON QUEUE dbo.QueueSENDEMail

--定义服务,该服务为消息接收服务,使用接收消息队列

USE ServerbrokerTest

GO

CREATE SERVICE ServiceReceiveEMail

AUTHORIZATION dbo ON QUEUE dbo.QueueRECEIVEEMail

7.定义路由

--由于这里使用的是同一个SqlServer 实例上的同一个数据库,所以可以使用默认的路由

USE ServerbrokerTest

GO

CREATE ROUTE AutoCreatedLocal

AUTHORIZATION dbo WITH ADDRESS = N‘LOCAL‘

8.编写主程序

在定义好上述Service Broker 对象后,我们可以编写一段SQL代码来完成消息异步传送和接收.

--编写主程序

--在定义好上述Service Broker 对象后,我们可以编写一段SQL代码来完成消息异步传送和接收

--开启事务

USE ServerbrokerTest

GO

BEGIN TRAN

--定义会话变量

DECLARE @dialogid uniqueidentifier

DECLARE @emailmessage XML

--启动会话

BEGIN  DIALOG CONVERSATION @dialogid

FROM SERVICE ServiceSendEMail

TO SERVICE ‘ServiceReceiveEMail‘

ON CONTRACT ContractEMail

WITH ENCRYPTION =OFF  --加密功能关闭

--定义消息变量及内容

SET @emailmessage=N‘<emailcontent>欢迎使用Service Broker </emailcontent>‘;

SEND ON CONVERSATION @dialogid

MESSAGE TYPE MessageTypeEMail

(@emailmessage);

--结束回话

END CONVERSATION @dialogid

--提交事务

COMMIT TRAN

--查询队列的内容]

SELECT * FROM   dbo.QueueSENDEMail

SELECT * FROM   dbo.QueueRECEIVEEMail

SqlServer2012上查询队列内容为空,不知道该怎么办?

SqlServer service broker 分布式系统(赵松涛)深入浅出 2005 数据库编程

时间: 2024-08-29 01:49:20

SqlServer service broker 分布式系统(赵松涛)深入浅出 2005 数据库编程的相关文章

sql server Service Broker 相关查询

-- 查看传输队列中的消息 --如果尝试从队列中移除时,列将表明哪里出现了问题 select * from sys.transmission_queue -- 查看Service Broker 激活的存储过程 select * from sys.dm_broker_activated_tasks -- 查看数据库中的每个会话端点.会话端点代表Service Broker 会话的每一端. -- 会话端点视图state列显示会话的状态 select * from sys.conversation_e

BizTalk 开发系列(四十) BizTalk WCF-SQL Adapter读取SQL Service Broker消息

SQL Service Broker 是在SQL Server 2005中新增的功能.Service Broker 为 SQL Server 提供队列和可靠的消息传递,可以可用来建立以异步消息为基础的应用.当然从题目大家可能也看出来了.我们本文主要不是为了讲SQL Service Broker(SSB),而是讲一下如何使用BizTalk WCF-SQL Adapter来访问SSB的数据. SQL Service Broker(SSB) 为要便于大家更好的接下来的示例,我们还是概况的讲一下SSB的

当前数据库未启用Service broker

数据库分离(备份)后,附加(还原)回到数据库,然后在程序中打开调用数据库的页面,出现如下问题:“未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持.如果希望使用通知,请为此数据库启用 Service Broker ”. 解决方案:(可直接执行第二步)在使用的数据库下,依次执行如下语句:第一步:SELECT is_broker_enabled FROM sys.databases WHERE name = '数据库名称' 执行发现:查看is_broker-

The SQL Server Service Broker for the current database is not enabled

把一个数据恢复至另一个服务器上,出现了一个异常: The SQL Server Service Broker for the current database is not enabled, and as a result query notifications are not supported.  Please enable the Service Broker for this database if you wish to use notifications. 截图如下: 解决方法: 参

未启用当前数据库的 SQL Server Service Broker,请为此数据库启用 Service Broker

未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持.如果希望使用通知,请为此数据库启用 Service Broker, 我执行了下面语句解决了问题 ALTER DATABASE [数据库名称] SET NEW_BROKER WITH ROLLBACK IMMEDIATE;ALTER DATABASE [数据库名称] SET ENABLE_BROKER; 未启用当前数据库的 SQL Server Service Broker,请为此数据库启用 Servic

SQLServer 2005 数据库定阅复制实现双机热备(主要是sharepoint 内容数据库)

原文:SQLServer 2005 数据库定阅复制实现双机热备(主要是sharepoint 内容数据库) 场景 公司最近的sharepoint的数据库服务器老是出问题,并且在一旦出现问题,就导致无法正常工作.最主要的是我们要加班还原以前的数据库,这是最头疼的.于是在网上查找资料,实现主备机的同步,对于sharepoint而言我们只需做到sharepoint的内容数据库同步即可.这种技术有个专业名词叫做双机热备. 双机热备原理 双机热备特指基于高可用系统中的两台服务器的热备(或高可用),因两机高可

sql-server 2005数据库文件恢复(检测到基于一致性的逻辑 I/O 错误)

今天sql-server数据库突然报错: SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正确(应为: 0x7c781313,但实际为: 0x67a313c9).在文件 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\E_BLOCK_DB.mdf' 中.偏移量为 0x00000000a34000 的位置对数据库 ID 5 中的页 (1:1306) 执行 读取 期间,发生了该错误.SQL Server 错误日志

Reusing dialogs with a dialog pool--一个sql server service broker例子

一个sql server service broker例子 ----------------------------------- USE master GO -------------------------------------------------- -- Create demo database section -------------------------------------------------- IF EXISTS (SELECT name FROM sys.data

未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker

昨晚遇到的这个问题,也知道Notifications service依赖底层的Service broker的.本以为只需要执行以下脚本对数据库启用Service broker即可. alter database DBNAME set enable_broker 但是,执行后,脚本一直处于执行状态,不以为然,正好在忙其它事情就没有查看运行结果,结果到今早一看,居然运行还没有结束.虽然是在一个生产数据库上执行的,数据库也只有30G的样子,但也不至于执行一个晚上也未结束,只好终止执行,使用 SELEC