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

推荐订阅源

I
InfoQ
博客园_首页
美团技术团队
M
MIT News - Artificial intelligence
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
H
Help Net Security
J
Java Code Geeks
T
Tailwind CSS Blog
Jina AI
Jina AI
量子位
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
G
Google Developers Blog
爱范儿
爱范儿
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
宝玉的分享
宝玉的分享
小众软件
小众软件
MongoDB | Blog
MongoDB | Blog
博客园 - 三生石上(FineUI控件)
L
LangChain Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
V
Visual Studio Blog
博客园 - Franky
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

博客园 - 独孤求败

移动端跨平台框架及资料 清理数据库订阅表 Raphael JS 矢量客户端开源框架 Telerik在mvc中的环境搭建 openscales2.2 style定义 openscales2.2 tilecache2.11图片缓存 openscales2.2 的初始缩放等级 openscales2.2的画点、线、多边形 Vs2010 FLex的集成开发 Openscales2.2 mapserver 开发demo PostGis Mapserver Openscales 环境搭建 mvc3无智能提示的解决方法 oracle数据库管理员创建用户的job 隐藏后台执行的dos窗口 iframe 加载完成但是ie进度条还在加载的解决办法 安卓模拟器的安装和使用 WCF错误及处理记录 - 独孤求败 - 博客园 .net学习资料链接收集整理 B树、B-树、B+树、B*树
基于SqlServer 2008 Service Broker的分布式应用
独孤求败 · 2013-06-03 · via 博客园 - 独孤求败

最近在设计一个项目,两个子系统之间通过DB(Sql server 2008)相互共享数据,相互之间不能访问,但是一个子系统的操作完成之后必须快速得到另外一个子系统的响应,

为了解决异步之间的通讯,定时轮询数据库肯定是最差的解决方案,最后将方案定制使用Service Broker上,使用简单,简化了管理。

Service Broker介绍:SQL Server Service Broker 为消息和队列应用程序提供 SQL Server 数据库引擎本机支持。这使开发人员可以轻松地创建使用数据库引擎组件在完全不同的数据库之间进行通信的复杂应用程序。开发人员可以使用 Service Broker 轻松生成可靠的分布式应用程序。使用 Service Broker 的应用程序开发人员无需编写复杂的内部通信和消息,即可跨多个数据库分发数据工作负荷。因为 Service Broker 会处理会话上下文中的通信路径,所以这就减少了开发和测试工作。同时还提高了性能。例如,支持网站的前端数据库可以记录信息并将进程密集型任务发送到后端数据库以进行排队。Service Broker 确保在事务上下文中管理所有任务以确保可靠性和技术一致性。

Service Broker使用

  • 设置数据库支持Service Broker
    ALTER DATABASE demo SET
    ENABLE_BROKER
    GO

    demo为数据库名称
    检查是否开启:Select DATABASEpRoPERTYEX('demo','IsBrokerEnabled')   如果为1表示成功。

  • 使用demo:
    CREATE TABLE [dbo].[test](
        [test] [varchar](50) NOT NULL,
     CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED 
    (
        [test] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    GO

    在数据库中创建一个表test
    C sharp代码如下:

    static string Connecting = "Data Source=.;Database=Demo;Uid=sa;Pwd=123456;Pooling=true;Connect Timeout=60;";
    
            static void Main(string[] args)
            {
                testDBMessage();
            }
    
            private static void testDBMessage()
            {
                Console.WriteLine("test sql server Communication:");
                SqlDependency.Start(Connecting);
                UpdateData();
                Console.ReadLine();
            }
    
            private static void UpdateData()
            {
                string strSQL = "select test from dbo.test";
                SqlDataAdapter da = new SqlDataAdapter(strSQL, Connecting);
                SqlDependency dependency = new SqlDependency(da.SelectCommand);
                dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
                DataTable dt = new DataTable();
                da.Fill(dt);
            }
    
            private static void dependency_OnChange(object sender, SqlNotificationEventArgs e)
            {
                Console.WriteLine(string.Format(" data modify in {0}", DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")));
                UpdateData();
            }

    通过上面的控制台程序,只要修改表test的数据,那么控制台会打印一条数据修改的记录。

   我们可以利用Service Broker在做web中的数据缓存、异构程序之间的通讯等。