【问题标题】:SQL Server: wait for new rowSQL Server:等待新行
【发布时间】:2012-04-06 18:15:34
【问题描述】:

如何等待来自 .NET 客户端应用程序的 SQL Server 表中出现新行?

背景:我想建立一个基于表格的消息队列。我不想使用 Service Broker,因为我希望消息是结构化的和强类型的。使用普通表我也可以与其他表建立关系。

【问题讨论】:

  • GASP 触发“等待”表和监视新表启动的作业。 Service Broker 真的很棒......只是说。
  • 是的,Service Broker 会很完美,但它不允许使用漂亮的表作为队列(对吗?我必须使用讨厌的 XML blob)。
  • 你可以写一个proc来查看队列...你可以查询XML(性能不是很好)

标签: .net sql-server database locking service-broker


【解决方案1】:

通常的方法是使用轮询,但如果您确实需要即时事件,您可以使用SqlDependency 类在查询结果发生变化时获取事件。

【讨论】:

  • 我可能需要在每条消息出列后创建一个新的依赖项。
  • SqlDependency 使用 ServiceBroker...我也打算提一下。
  • 我会接受这个答案,因为 SqlDependency 在后台使用 Service Broker 自动接收更新通知。我将为查询“select id from tab where id > @lastReceivedMessageID”注册一个通知。
【解决方案2】:

您需要进行投票或获得通知。

轮询需要客户端定期查询表,使用谓词或count(*)。这可能不是一个很好的解决方案。

将触发器放在表中并向客户端中的侦听器发送消息可能是一种廉价但有用的通知系统。

【讨论】:

    【解决方案3】:

    在我们的应用程序中,我们使用 System.Threading.Timer 来轮询数据库表。一旦有新消息可用,它就会被处理。如果处理成功,则从 DB 中删除消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多