惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
D
DataBreaches.Net
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
D
Docker
N
Netflix TechBlog - Medium
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
C
Check Point Blog
腾讯CDC
Stack Overflow Blog
Stack Overflow Blog
V
Visual Studio Blog
IT之家
IT之家
月光博客
月光博客
U
Unit 42
K
Kaspersky official blog
T
Threatpost
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
GbyAI
GbyAI
P
Proofpoint News Feed
Last Week in AI
Last Week in AI
云风的 BLOG
云风的 BLOG
酷 壳 – CoolShell
酷 壳 – CoolShell
I
InfoQ
Engineering at Meta
Engineering at Meta
Recorded Future
Recorded Future
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
Security @ Cisco Blogs
MyScale Blog
MyScale Blog
大猫的无限游戏
大猫的无限游戏
Security Archives - TechRepublic
Security Archives - TechRepublic
Webroot Blog
Webroot Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hacker News - Newest:
Hacker News - Newest: "LLM"
S
Schneier on Security
S
Secure Thoughts
The Register - Security
The Register - Security
B
Blog RSS Feed
The Last Watchdog
The Last Watchdog
P
Palo Alto Networks Blog
爱范儿
爱范儿
B
Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
N
News and Events Feed by Topic
阮一峰的网络日志
阮一峰的网络日志
L
LINUX DO - 热门话题
C
Cisco Blogs
Spread Privacy
Spread Privacy
F
Full Disclosure
博客园 - 聂微东
T
The Blog of Author Tim Ferriss

博客园 - Heclei

WebDeploy 同步IIS6 bindingRedirect 相当奇怪的设置 - Heclei - 博客园 C# 使用WM_NCLBUTTONDOWN消息实现任意位置移动窗体 发布开源程序:数据库结构比较 VS2005 WEB F5调试自动退出调试状态 JS整理,getCookie, getElementsByClassName , 添加删除事件 (转)C# 单实例 - Heclei - 博客园 (转)VC++ 2005 用程式建立 Paradox ( *.db ) 资料库档桉 - Heclei C# 判断操作系统类型 Service Broker实现发布-订阅(Publish-Subscribe)框架(3) Service Broker实现发布-订阅(Publish-Subscribe)框架(2) .net sqlserver 关于连接池没事释放的注意项 mysql ERROR 1045 JS实现局部打印和预览 perforce,P4,权限设置 Visual Studio 2005 sp1 新愁加就恨 将一个数据库的登录账户转移到另一个账户中(Trans logins from one database to another ) Find the need for WinFx, understanding for very very beginners 使用vsto制作的outlook插件,安装加载失败
Service Broker实现发布-订阅(Publish-Subscribe)框架(1)
Heclei · 2008-09-05 · via 博客园 - Heclei

Service Broker 实现一套完整的发布-订阅方案,其中author 发送Service Broker Message(又称article)到发布者(Publisher)。发布者负责分发消息给不同的订阅者(Subscriber)。每一个订阅者通过订阅来接受特定的消息。

下图描述了这一个发布-订阅方案:

下面看看如何通过Service Broker功能来实现这一方案。

定义基础架构

实现author、发布者和不同的订阅者作为Service Broker服务。AuthorService通过与PublisherService开始一个新的会话(conversation)发送article消息。在AuthorService发送一个实际的article消息之前,它需要事先通知PublisherService在会话中article的主体(Subject)。

订阅者也是Service Broker服务,它将与PublisherService进行会话。订阅者首先发送请求感兴趣的主题,随后接受所有关于这一主题的已发布的article消息。因为这些要求,PublisherService接口需要支持如下2个contracts:

l         author服务发送article消息的contract

l         订阅者订阅主题和接收已发布article消息的contract

下面定义了相关的Service Broker对象。

消息类型Message Type

CREATE MESSAGE TYPE [http://ssb.csharp.at/SSB_Book/c10/PublishMessage]

VALIDATION = WELL_FORMED_XML;

GO

CREATE MESSAGE TYPE [http://ssb.csharp.at/SSB_Book/c10/ArticleMessage]

VALIDATION = NONE;

GO

CREATE MESSAGE TYPE [http://ssb.csharp.at/SSB_Book/c10/SubscribeMessage]

VALIDATION = WELL_FORMED_XML;

GO

契约Contract

CREATE CONTRACT [http://ssb.csharp.at/SSB_Book/c10/PublishContract]

(

[http://ssb.csharp.at/SSB_Book/c10/PublishMessage] SENT BY INITIATOR,

[http://ssb.csharp.at/SSB_Book/c10/ArticleMessage] SENT BY INITIATOR

)

GO

CREATE CONTRACT [http://ssb.csharp.at/SSB_Book/c10/SubscribeContract]

(

[http://ssb.csharp.at/SSB_Book/c10/SubscribeMessage] SENT BY INITIATOR,

[http://ssb.csharp.at/SSB_Book/c10/ArticleMessage] SENT BY TARGET

)

GO

队列 QUEUE 服务 SERVICE

发布者队列及其服务

CREATE QUEUE [PublisherQueue]

GO

CREATE SERVICE [PublisherService] ON QUEUE [PublisherQueue]

(

[http://ssb.csharp.at/SSB_Book/c10/PublishContract],

[http://ssb.csharp.at/SSB_Book/c10/SubscribeContract]

)

GO

订阅者队列及其服务

CREATE QUEUE SubscriberQueue1;

GO

CREATE SERVICE SubscriberService1 ON QUEUE SubscriberQueue1;

GO

CREATE QUEUE SubscriberQueue2;

GO

CREATE SERVICE SubscriberService2 ON QUEUE SubscriberQueue2;

GO

Author队列及其服务

CREATE QUEUE AuthorQueue;

GO

CREATE SERVICE AuthorService ON QUEUE AuthorQueue;

GO

在创建好上述Service Broker基础架构后,下面创建2个表,分别用来存储发布和订阅记录。针对本示例,我们分别创建如下2个表:Publications和Subscriptions。(EntLib.com译者注:Publications 表需要分别在Author和Publisher端创建;Subscriptions表需要分别在Publisher和Subscriber端创建。)

CREATE TABLE Publications

(

Publication UNIQUEIDENTIFIER NOT NULL PRIMARY KEY,

Subject NVARCHAR(MAX) NOT NULL,

OriginalXml XML NOT NULL

)

GO

CREATE TABLE Subscriptions

(

Subscriber UNIQUEIDENTIFIER NOT NULL PRIMARY KEY,

Subject NVARCHAR(MAX) NOT NULL,

OriginalXml XML NOT NULL

)

GO

通过这2个表,我们可以匹配来自AuthorService的article消息和订阅者。通过Subject列来连接这2个表,后面的“发布者逻辑”中具体介绍。下面看看PublisherService端运行的服务程序。

EntLib.com译者注:本文翻译Apress出版《Pro SQL Server 2005 Service Broker》的其中一个章节。后面的内容会尽快发布,欢迎交流、分享。谢谢!