有人可以解释服务经纪人中的对话组吗?
目前,我正在使用服务代理将消息从一个SQL服务器发送到另一个SQL服务器.在发送服务器上,我正在尝试关联消息,以便在接收端串行处理它们.根据文档,对话组似乎非常适合这种情况,但在接收服务器上,消息会被分配到与发送消息时指定的对话组不同的对话组.
我在网上搜索,看到这种行为似乎是有意的(http://social.msdn.microsoft.com/forums/en-US/sqlservicebroker/thread/baf48074-6804-43ab-844a-cb28a6dce02b/) ,但后来我对语法的有用性感到困惑(http://msdn.microsoft.com/en-us/library/ms178624.aspx)
WAITFOR(
GET CONVERSATION GROUP @conversation_group_id FROM [dbo].[ReceiveQueue]
)
Run Code Online (Sandbox Code Playgroud)
如果会话组没有遇到来自发件人的邮件,并且使用相同会话组ID发送的邮件在接收方没有相同的会话组ID,那么上面代码的重点是什么?
是否有使用SQL Server Service Broker的.NET API或对象模型?
我发现SQL Azure不支持SQL Server Service Broker.Service Broker是我们的事件通知需求的一个非常有吸引力的选择.但在承诺之前,我想确保它将来会得到微软的支持.SQL Azure不支持Service Broker这一事实让我很担心.这是退休服务经纪人的第一步吗?我们计划将来将应用程序迁移到Azure,并且我试图弄清楚Microsoft是否会在SQL Azure的未来版本中支持Service Broker.我尝试了很多谷歌搜索,但我没有得到明确的答案.是否有人知道为什么微软不支持SQL Azure上的Service Broker以及它将来是否会支持?
谢谢,Sathish
sql-server service-broker sql-server-2008 azure-sql-database
Sql Service Broker使用以下启发式方法来确定队列中的消息何时阻止您的应用程序执行任何有用的工作:
"Service Broker提供自动中毒消息检测.当包含RECEIVE语句的事务回滚五次时,Service Broker会通过自动将队列状态设置为OFF来禁用事务从中接收消息的所有队列." (http://msdn.microsoft.com/en-us/library/ms166137.aspx)
我对这种基本方法很好,但有没有办法将重试次数从5改为更高,可能是20?
这对我有用的原因是我当前用来处理队列的代码是一个在Sql Server之外的应用程序,它有大约10个工作线程,每个工作线程都有一个独立的SqlConnection,每个线程执行自己独立的RECEIVE声明.如果此应用程序由于某种原因而死亡,则可能会为每个工作线程导致单独的回滚事务,这足以回滚以禁用队列.相反,我希望能够在不禁用队列的情况下终止我的应用程序.我应该重写应用程序以使用单个SqlConnection,但如果我可以说类似的话会更容易
ALTER QUEUE MyQueue SET RollbacksBeforePoison=20
Run Code Online (Sandbox Code Playgroud)
有可能吗?
我想实现一个调用Web服务的存储过程(在服务代理infrasturture中).我查看了Aschenbrenner关于Service Broker的书中的一些例子.但是,我找不到任何Web服务调用.有人可以帮忙吗?
谢谢Sqlbs
我有一个由三部分组成的应用程序:
今天,这些系统(在不同的服务器上,由不同的团队开发)使用WCF Web服务进行互操作.
这种设置工作正常 - 只要所有服务器都启动.无论如何,他们不是 - 并非总是如此.
所以我开始考虑使用MSMQ或SQL Server Service Broker来处理这些系统之间的通信 - 至少在网上商店存储订单到订单管理系统时,或订单管理系统发送技术数据到技术数据库系统.
我希望在整个系统中实现更高的可靠性 - 即使订单管理后端暂时不可用,用户仍然可以下订单并且不会丢失.
但最大的问题是:MSMQ还是Service Broker?这三个系统都是基于Windows和.NET的,并且已经在三个独立的服务器上使用SQL Server.
有没有人有一些可靠的,真实的事实来代表(或反对)这两种技术之一?这两套技术的真实体验是什么?利弊.如果你可以从头开始 - 你会选择哪一个?或者你会完全选择其他东西(什么?)?
我想使用SQL Server Service Broker生成一条消息(在SQL Server内部)并在外部C#应用程序中读取它.
我仅限于运行SQL Server 2005的Windows 2003.我读过一堆文章,暗示这是一种可能性,但我没有在任何地方看到一个例子.这可能吗?
很少,由于尚未识别的原因,我的队列被禁用,当发生这种情况时,我再次使用此查询启用:
ALTER QUEUE [MyQueue] WITH STATUS = ON;
Run Code Online (Sandbox Code Playgroud)
但是,我想知道何时禁用队列,例如事件(T-SQL),或者如果启用了队列,则检查每个"x"时间.
我在网上找到的所有使用 SQL Server Service Broker 队列的示例似乎都有两个队列。我不明白为什么,每个例子似乎都假设这是显而易见的,没有必要解释。
有几件事将写入我的队列,存储过程将从队列中读取并插入到数据库中。为什么我需要两个队列?
例如: http: //www.techrepublic.com/article/use-service-broker-internal-activation-in-sql-server-2005/6156264#
我们有一个企业LOB应用程序,用于使用SQLServer(2008)管理数百万个书目(大量文本)记录.数据库非常规范化(完整记录可能很容易由十个连接表加上嵌套集合组成).写交易很好,我们现在有一个非常敏感的搜索解决方案,它慷慨地使用全文索引和索引视图.
问题是,在现实中,许多内容研究用户需要,可以更好地提供服务的只读仓储式拷贝数据,但它需要近乎实时地连续复制(几分钟的等待时间是精细).
我们的搜索已经通过几个计算列或复合表进行了优化,我们希望添加更多.索引视图由于其约束(例如没有外部联接)而无法满足所有需求.这些数据有许多"方面",就像只读数据仓库可能提供的那样,涉及权限,地理位置,类别,质量和相关文档的数量.我们还组成了相当静态的记录的复杂xml表示,可以组合和存储一次.
如果完全通过触发器完成,则非规范化,计算和搜索优化的总量会引起不可接受的延迟,并且还容易发生锁定冲突.
我已经研究了一些Microsoft的SQL Server建议,我想知道是否有任何具有类似要求经验的人可以提供以下三个建议(或其他使用SQL Server/.Net堆栈的建议):
事务性复制到只读副本 - 但是从文档中不清楚可以在订户端更改模式并添加触发器,计算列或组合表;
表分区 -不改变数据,但也许是为了数据的段大面积,目前正在不断重新计算,例如权限,记录类型(60),地理区域等...将允许在事务侧触发运行少锁?
离线批处理 - 微软经常使用该短语,但除了在交易复制的订户端"检查信用卡欺诈迹象"之外,没有提供很好的例子......这将是一个很好的样本,但是如何完成究竟在实践中?每5分钟运行一次的SSIS工作?服务经纪人?连续轮询的外部可执行文件?我们要避免"跑,晚上一个漫长的过程"解决方案,我们也想避免被交易服务器上运行的更新密集聚集/合成日常每5分钟的事情事务副锁定了.
更新到#3:发布后,我发现这个SO答案带有使用变更跟踪,服务代理,SSIS和触发器的实时数据集成的链接- 看起来很有希望 - 这是推荐的路径吗?
另一个更新:反过来,它帮助我找到rusanu.com - 所有东西ServiceBroker由SO用户Remus Rusanu.异步消息传递解决方案似乎比复制方案更好地匹配我们的场景......
sql-server full-text-search data-warehouse service-broker transactional-replication