简介: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 --查看当期数据库中待传送的消息

接收方脚本

最新文章

  1. Mycat配置及使用详解.
  2. SqlHelper类
  3. HTTP头的Expires与Cache-control
  4. linux 学习基础7之脚本的练习
  5. 【翻译】CEDEC2015 速成Albedo Chart 制作
  6. TransactionScope
  7. 【安卓】给ViewFlipper加指示器,相似ViewPagerIndicator库提供的那种、!
  8. Oracle——PL/SQL 语句
  9. 打造自己博客(wordpress)的wap手机版本
  10. java学习之jdbc的封装
  11. MySql Table错误:is marked as crashed and last (automatic?) 和 Error: Table &quot;mysql&quot;.&quot;innodb_table_stats&quot; not found
  12. IO (五)
  13. Spring使用支付宝扫码支付
  14. WPF 文本框设置了阴影效果后,因左右的transform变化引发的拉伸渲染问题
  15. Oracle exp和expdp对数据进行备份
  16. android页面渲染速度提升的常用方法
  17. day03 变量 运算符 基本数据类型 输出功能 格式化输出
  18. render finished
  19. linux学习第四天 (Linux就该这么学)2018年11月16日
  20. maven项目中,lib目录下有自己私有的包,则需要配置一下代码,然后进行打包

热门文章

  1. LINQ之路10:LINQ to SQL 和 Entity Framework(下)
  2. jQuery Length属性
  3. PNG的使用技巧
  4. WPF感悟
  5. jsp中jstl标签的类似 if - else 语句 的语法
  6. java appium api
  7. 后台启动weblogic成功后,在web浏览器上无法访问
  8. reggetvalue在xp下加载失败
  9. SQL Server Reporting Service(SSRS) 第四篇 SSRS 用法总结
  10. 设置git 不提交 修改权限的文件