我继承了一个实现多个长期运行进程的项目。这些进程中的每一个都会更新一个状态表,然后通过 ajax 轮询反映在 UI 上。这些进程运行在使用 Rhino Service Bus(带有 MSMQ)的后台应用程序中,并通过发送“执行长进程”消息来触发该进程。
该过程本身正在对众多表进行各种数据操作、验证、更新、插入删除等。
似乎它真的在到处滥用 NHibernate 会话和多个会话和嵌套的 TransactionScopes。
我对 NHibernate / RSB 专家的问题是,在长时间运行的进程执行期间,您将如何更新状态表?
我曾想过:
- 在执行过程中发送“更新状态消息”(需要解决 NHibernate / RSB 会话管理问题)。
- 使用带有数据库持久化器的 saga 并让 ajax 轮询函数查询它而不是状态表