【问题标题】:With sql service broker what happens if the target application crashes?使用 sql 服务代理,如果目标应用程序崩溃会发生什么?
【发布时间】:2013-09-11 12:25:18
【问题描述】:

目标应用程序在无响应、停止和重新启动时如何获取发送给它的消息?重新上线后会自动再次发送吗?

您将如何使用 EF 和 C# 实现这一点?教程在哪里!

【问题讨论】:

标签: c# sql-server-2008-r2 entity-framework-5 .net-4.5 service-broker


【解决方案1】:

Service Broker 从 SQL Server 发送到 SQL Server。所使用的协议对崩溃具有完全的弹性,消息保留在发送者的sys.transmission_queue 中,直到目标确认,并且目标仅在将它们提交到目标服务队列后才确认它们。 SQL Server 还处理与瞬时故障相关的所有事情:无响应的目标、网络分区、服务/修补中断。所有这些都由 SQL Server 自己处理,因为它保证 Exactly Once In Order 交付。

现在,如果您的 应用程序 崩溃会发生什么,即。在处理 RECEIVE 语句时,非常简单:您在数据库事务上下文中通过 T-SQL 与 Service Broker 交互。如果应用程序崩溃,ACID 数据库事务的正常行为会启动:由于事务没有提交,它将被回滚,并且应用程序将有机会在重新启动后再次处理该消息。

因此,从您的应用程序的角度来看,您只能在数据库事务上下文中与数据库、队列和表等进行交互。您的问题类似于“如果应用程序崩溃,INSERT 会发生什么?”

【讨论】:

  • 感谢您的解释,c#中的一些代码示例关于如何实现这一点,最好使用实体框架?
猜你喜欢
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多