Service Broker应用(1):简介、同server不同DB间的数据传输
简介:SQL Server Service Broker,以下简称SSB,是一种完全基于MSSQL数据库的数据处理技术,为短时间内处理大量数据提供了一种可靠、稳定、高效的解决方案。一次同步的数据最大可达2G,采用二进制传输,多线程处理数据。可以理解为数据库中的消息中间件。
根据负载类型分,SSB有Windows负载类型和证书类型,由于证书类型不支持跨集群的数据传输,故不讨论,用Windows负载类型。后续脚本都是Windows负载类型的脚本。
SQL Server版本在2008及以上。
应用场景:
- 外部数据进入DB(如XML、TXT等文档中的数据,文档中的数据需用程序读取)
- DB之间的数据同步:包括同server不同DB,不同server之间,集群之间的数据同步
优点:安全、稳定可靠、解耦合、多线程、处理数据很快、对网络的实时连接要求不高
缺点:跨集群的解决方案很复杂,实施起来不易;查找数据处理失败的异常原因比较困难;
实施方案--同server不同DB:新建数据库的步骤省略,跨server的实施方案见下一个篇
消息发送方配置脚本:
--第一步:用户数据库开启service broker服务
USE master
GO
select is_broker_enabled,service_broker_guid,* from sys.databases where name IN ('QEC_Interface')--is_broker_enabled是1表示开启,0反之
ALTER DATABASE QEC_Interface SET NEW_BROKER WITH ROLLBACK IMMEDIATE --遇到无法执行下面的语句时,先执行这一条语句:回滚事务 ALTER DATABASE QEC_Interface SET ENABLE_BROKER
ALTER DATABASE QEC_Interface SET TRUSTWORTHY ON GO --第二步:发送方用户数据库上创建消息类型:消息类型的名称要与接收方的名称完全相同(区分大小写)
use QEC_Interface
go
create message type [//qciscm05/QEC_Interface/NoneCustomsSend]
validation = well_formed_xml
--For Receiving MessageType
create message type [//qciscm05/QEC_Interface/NoneCustomsReceived]
validation = well_formed_xml
--第三步:用户数据库上创建约定:约定的名称要与接收方的名称完全相同(区分大小写)
create contract [//qciscm05/QEC_Interface/NoneCustomsContract]
( [//qciscm05/QEC_Interface/NoneCustomsSend] SENT BY INITIATOR,
[//qciscm05/QEC_Interface/NoneCustomsReceived] SENT BY TARGET
)
--第四步:用户数据库上创建队列
create queue InterfaceNoneCustomsQueue
with status=on
--第五步:用户数据库上创建服务
create service [//qciscm05/QEC_Interface/NoneCustomsService]
on queue InterfaceNoneCustomsQueue
([//qciscm05/QEC_Interface/NoneCustomsContract]) -----------------------------------------------------
--目标队列绑定SP,自动处理反馈消息
alter queue InterfaceNoneCustomsQueue
with status = on,
activation(
status = ON,
procedure_name= [dbo].[SP_SSB_HandleReceiveNoneCustoms],
max_queue_readers=50,
execute as self
); ---=手动发送消息 exec SP_SSB_SendNoneCustoms 'TEHP1301996QN','<XML>
<RESPONSECONTENT>
<RESPONSE_MESID>C4EE2C5C758A4656800B6617BAC5B541</RESPONSE_MESID>
<APPL_TYPE>A</APPL_TYPE>
<DECLARE_TYPE>GJN</DECLARE_TYPE>
<STEP_ID />
<SEQ_NO>TEHP1301996QN</SEQ_NO>
<JOB_NO>GJAtestOK</JOB_NO>
<RESULT_CODE>OK01</RESULT_CODE>
<RESULT_INFO />
</RESPONSECONTENT>
</XML>' --==基本查询操作
select conversation_handle,state_desc,* from sys.conversation_endpoints--查看当前数据库中开启的会话
select conversation_handle,cast(message_body as xml),* from InterfaceNoneCustomsQueue--查看队列中的消息
select transmission_status,cast(message_body as xml),* from sys.transmission_queue --查看当期数据库中待传送的消息
发送方脚本
消息接受方配置脚本:
--第一步:用户数据库开启service broker服务
use master
go
select is_broker_enabled,service_broker_guid,* from sys.databases where name IN ('QEC')
ALTER DATABASE QEC SET NEW_BROKER WITH ROLLBACK IMMEDIATE --遇到无法执行下面的语句时,先执行这一条语句 ALTER DATABASE QEC set ENABLE_BROKER
ALTER DATABASE QEC SET TRUSTWORTHY ON go --第二步:发送方用户数据库上创建消息类型:消息类型的名称要与发送方的名称完全相同(区分大小写)
use QEC
go
create message type [//qciscm05/QEC_Interface/NoneCustomsSend]
validation = well_formed_xml
--For Receiving MessageType
create message type [//qciscm05/QEC_Interface/NoneCustomsReceived]
validation = well_formed_xml
--第三步:用户数据库上创建约定:约定的名称要月发送方的名称完全相同(区分大小写)
create contract [//qciscm05/QEC_Interface/NoneCustomsContract]
( [//qciscm05/QEC_Interface/NoneCustomsSend] SENT BY INITIATOR,
[//qciscm05/QEC_Interface/NoneCustomsReceived] SENT BY TARGET
)
--第四步:用户数据库上创建队列
create queue QECNoneCustomsQueue
with status=on
--第五步:用户数据库上创建服务
create service [//qciscm05/QEC/NoneCustomsService]
on queue QECNoneCustomsQueue
([//qciscm05/QEC_Interface/NoneCustomsContract]) --==队列绑定SP,自动处理队列中接收到的消息
alter queue QECNoneCustomsQueue
with status = on, --on设置队列为启用,off相反
activation(
status = on, --on设置绑定的SP为激活状态,off相反
procedure_name=SP_SSB_HandleMessageForNoneCustoms, --指定要绑定的SP
max_queue_readers=50, --设置并发数:SP同时处理消息的进程数,多线程(最大值32767)
execute as self --指定SP以当前用户身份执行
);
--==
select conversation_handle,conversation_id,state_desc,* from sys.conversation_endpoints--查看当前数据库中开启的会话
select conversation_handle,cast(message_body as xml),* from QECNoneCustomsQueue--查看队列中的消息
select transmission_status,cast(message_body as xml),* from sys.transmission_queue --查看当期数据库中待传送的消息
接收方脚本
Service Broker应用(1):简介、同server不同DB间的数据传输的更多相关文章
- SQL Server Service Broker 简单例子 (转)
SQL Server Service 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 ...
- 基于SQL Server 2008 Service Broker构建企业级消息系统
注:这篇文章是为InfoQ 中文站而写,文章的地址是:http://www.infoq.com/cn/articles/enterprisemessage-sqlserver-servicebroke ...
- Service Broker应用(2):不同server间的数据传输,包含集群
不同Server之间的数据传输,包含DB使用AlwaysOn 配置脚本: SQL Server Service Broker 跨集群通信 具体的TSQL 脚本语句如下.注意的是TSQL语句是在发送方还 ...
- SQL Server 2005 Service Broker
一.引言 SQL Server 2005 的一个主要成就是可以实现可靠.可扩展且功能完善的数据库应用程序.与 .NET Framework 2.0 公共语言运行库 (CLR) 的集成使开发人员可以将重 ...
- [杂]SQL Server 之 Service Broker
由于某些原因,我们的缓存依赖于数据库,而数据库反向通知需要依赖和使用ServiceBroker, 由于Deploy的人往往不是很清楚这个SB需要如何部署,特此记录. 判断数据库是否启用了Service ...
- SQL Server Service Broker创建单个数据库会话
概述 SQL Server Service Broker 用来创建用于交换消息的会话.消息在目标和发起方这两个端点之间进行交换.消息用于传输数据和触发消息收到时的处理过程.目标和发起方既可以在同一数据 ...
- SQL Server Service Broker创建单个数据库会话(消息队列)
概述 SQL Server Service Broker 用来创建用于交换消息的会话.消息在目标和发起方这两个端点之间进行交换.消息用于传输数据和触发消息收到时的处理过程.目标和发起方既可以在同一数据 ...
- 未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker
昨晚遇到的这个问题,也知道Notifications service依赖底层的Service broker的.本以为只需要执行以下脚本对数据库启用Service broker即可. alter dat ...
随机推荐
- 说说focus /focusin /focusout /blur 事件
事件触发时间 focus:当focusable元素获得焦点时,不支持冒泡:focusin:和focus一样,只是此事件支持冒泡:blur:当focusable元素失去焦点时,不支持冒泡:focusou ...
- [原创] Win7全自动精简批处理_绝对原创,绝对给力_感谢无忧给了我一年的潜水
2011htpcfans发表于 2012-5-5 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=210043 @echo 全自动/手动精简 ...
- Python之路 day2 字符串/元组/列表/字典互转
#-*-coding:utf-8-*- #1.字典 dict = {'name': 'Zara', 'age': 7, 'class': 'First'} #字典转为字符串,返回:<type ' ...
- web.xml中的contextConfigLocation在spring中的作用
在web.xml中通过contextConfigLocation配置spring, contextConfigLocation参数定义了要装入的 Spring 配置文件.默认会去/WEB-INF/下加 ...
- 不在折腾---hbase-0.96.2-hadoop2
首先安装好zookeeper集群 上传hbase安装包 解压 配置hbase集群,要修改3个文件 * 修改hbase-env.sh 设置JAVA_HOME: export JAVA_HOME=... ...
- 关于meta元信息元素
HTML头部<meta>标记通过属性定义文件的名称.内容.关键词.作者.描述等多种信息,但是只能在源代码中显示,页面上无法显示出来.此标签可以在头部有多个. A.设置页面关键词 基本语法: ...
- Guava----Function
1. Function接口,提供两个方法: apply方法: 可以自定义自己想实现的功能 @Nullable T apply(@Nullable F input); 1. 实例: import com ...
- MySQL数据库的备份与还原
http://www.cnblogs.com/lql123/p/6090681.html //安装WordPress 1.备份 密码为:AAAzzz//123 mysqldump -uroot ...
- checkbox设置单选
http://blog.sina.com.cn/s/blog_4550f3ca010137td.html $("*") ‘表示获取所有对象 $("#XXX" ...
- 十天学会DIV+CSS(DIV布局)
一列布局: 一列固定宽度.一列固定宽度居中.一列自适应宽度.一列自适应宽度居中 一列固定宽度 <head> <style type="text/css"> ...