使用sql service broker如果目标应用程序崩溃会发生什么?

时间:2013-09-11 12:25:18

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

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

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

1 个答案:

答案 0 :(得分: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发生什么情况”相同?