简介: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间的数据传输的更多相关文章

  1. SQL Server Service Broker 简单例子 (转)

    SQL Server Service Broker服务体系结构 消息类型 — 定义应用程序间交换的消息的名称.还可以选择是否验证消息.约定 — 指定给定会话中的消息方向和消息类型.队列 — 存储消息. ...

  2. 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 ...

  3. 基于SQL Server 2008 Service Broker构建企业级消息系统

    注:这篇文章是为InfoQ 中文站而写,文章的地址是:http://www.infoq.com/cn/articles/enterprisemessage-sqlserver-servicebroke ...

  4. Service Broker应用(2):不同server间的数据传输,包含集群

    不同Server之间的数据传输,包含DB使用AlwaysOn 配置脚本: SQL Server Service Broker 跨集群通信 具体的TSQL 脚本语句如下.注意的是TSQL语句是在发送方还 ...

  5. SQL Server 2005 Service Broker

    一.引言 SQL Server 2005 的一个主要成就是可以实现可靠.可扩展且功能完善的数据库应用程序.与 .NET Framework 2.0 公共语言运行库 (CLR) 的集成使开发人员可以将重 ...

  6. [杂]SQL Server 之 Service Broker

    由于某些原因,我们的缓存依赖于数据库,而数据库反向通知需要依赖和使用ServiceBroker, 由于Deploy的人往往不是很清楚这个SB需要如何部署,特此记录. 判断数据库是否启用了Service ...

  7. SQL Server Service Broker创建单个数据库会话

    概述 SQL Server Service Broker 用来创建用于交换消息的会话.消息在目标和发起方这两个端点之间进行交换.消息用于传输数据和触发消息收到时的处理过程.目标和发起方既可以在同一数据 ...

  8. SQL Server Service Broker创建单个数据库会话(消息队列)

    概述 SQL Server Service Broker 用来创建用于交换消息的会话.消息在目标和发起方这两个端点之间进行交换.消息用于传输数据和触发消息收到时的处理过程.目标和发起方既可以在同一数据 ...

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

    昨晚遇到的这个问题,也知道Notifications service依赖底层的Service broker的.本以为只需要执行以下脚本对数据库启用Service broker即可. alter dat ...

随机推荐

  1. Myeclipse出现 java文件中文乱码问题

    一.将整个project设置编码UTF-8(UTF-8可以最大的支持国际化) windows->Preferences->general->Workspace->Text fi ...

  2. 在ionic/cordova中使用极光推送插件(jpush)

    Stpe1:创建一个项目(此处使用的是tab类型的项目,创建方式可参照我前一篇如何离线创建Ionic1项目) Stpe2:修改项目信息 打开[config.xml]修改下图内容:

  3. [Linux]cmd to use

    0x01 Linux Perfermance Analysis in 60s 1> uptime ---load averages 2> dmesg -r | tail ---kernel ...

  4. App的启动过程

    App的启动过程 所有的app都是通过launcher去启动的 launcher自己也是一个app,一个系统级别的app,放在asystem/app/下,使用系统签名. 对代码进行分析

  5. $.inArray()

    原文链接:http://www.css88.com/jqapi-1.9/jQuery.inArray/ jQuery.inArray( value, array [, fromIndex ] )返回: ...

  6. 重写toString()方法来描述一个类

    package com.zch.test; /* toString方法以及重写toString方法 toString方法是一个自我描述方法 方法本身返回的是该对象的实现类的 类名 + @ + hash ...

  7. ADO.NET 使用通用数据库操作类Database (SQL Server)

    一.Web.config配置 <connectionStrings> <add name="constr_name" connectionString=" ...

  8. .net 导出Excel功能

    将DataSet对象导出成Excel文档 一.不带格式控制 void btnExport_Click(object sender, EventArgs e) { IList<string> ...

  9. h5

    1. 在iPhone 手机上默认值是(电话号码显示为拨号的超链接): <meta name="format-detection" content="telephon ...

  10. Discuz 网站移至 Ubuntu 14.04.4 LTS VPS 配置

     查看 当前系统版本信息 复制命令:lsb_release -a 1.首先更新本地软件库索引 复制命令:apt-get update 2.安装apache2 复制命令:apt-get install ...