0

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

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

4

1 回答 1

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 会发生什么?”相同。

于 2013-09-11T19:54:23.857 回答