【问题标题】:products settings synchronization产品设置同步
【发布时间】:2025-12-21 11:30:10
【问题描述】:

我有两个产品,称为 A 和 B。这两个产品共享一些设置,比如说 X。产品 A 是一个常规的 Windows 服务,它运行一个常规的 C# 计时器,每 X 秒执行一些操作。在产品B中,用户可以更改此参数X。如何让产品A知道B中设置的更改?产品 A 和 B 的唯一共同点是 Microsoft SQL Server 数据库(设置也将从 B 写入其中)。

我需要一些方法/架构,当数据库中的设置发生更改时,B 可以通知 A,还有很多像 X 这样的设置,所以应该是一个通用的解决方案。

谢谢!

【问题讨论】:

  • 不清楚您要做什么。你说产品 A 运行一个计时器并执行了一个动作。您是否使用 SQL Server 的作业队列每 X 秒触发一次操作。什么动作?
  • 抱歉,两个产品都包含windows服务,产品A执行的动作是从硬件设备读取一些数据,但是这个动作与同步无关,谢谢你的注意。
  • 如果服务在同一台机器上,为什么不'touched'文件......如果没有,为什么不有一个名为updated_at的SQL字段,以便设置每次执行操作 A 时都会检查有效性?
  • 谢谢 Myst。但是,虽然您建议使用 updated_at 字段的方法可行,但它不是我更喜欢的解决方案,因为它会导致大量不必要的数据库请求,操作 A 通常每 5 秒执行一次,并且值/设置经常更改一次一周或类似的时间。

标签: sql sql-server architecture websocket


【解决方案1】:

您正在寻找消息队列。我相信 SQL Server 中已经有了一个(虽然已经有一段时间了)。您的批处理作业只需要在每次运行时检查队列以获取新的配置值。

【讨论】:

  • 这意味着每次执行我的操作时,我都需要轮询此队列以获取新设置。这与仅轮询设置表并在 updated_at 列上排序有何不同?我希望它由事件驱动,因为我的动作执行非常频繁,有时甚至以 2-3 秒的间隔执行。
  • 基本上没有什么不同,队列只是经过高度优化的表,可以从头部提取记录,并且只传递一次。您完全可以通过创建具有某种“已接收”标志的表格来构建自己的表格,您可以在将设置从表格中拉出后进行设置。