2

我想通过向该应用程序的数据库添加触发器来使用 Rebus 与第三方应用程序集成,以便触发器以 Rebus 消息格式插入记录,其中包含有关数据库更改的信息(操作类型:插入、更新、删除、表名和行 ID)。请告诉我有什么方法可以轻松做到这一点,或者我需要通过查看https://github.com/rebus-org/Rebus/blob/master/src/Rebus/Transports/Sql/SqlServerMessageQueue自己创建存储过程.cs发送方法?

或者,我可以使用触发器中的参数触发 exe,但它不是事务性的。

我也见过这个问题https://github.com/rebus-org/Rebus/issues/119但我想这是个死主意。

也许还有其他推荐的方法?

更新:我刚刚意识到 Rebus 消息的主体是序列化的,所以在 SQL 中这样做会很疯狂(如果没有 SQL-CLR 甚至不可能)所以也许唯一的方法是使用 ReceiveMessage 方法创建自定义传输,以我自己的方式接受消息格式?

提前致谢 :)

4

1 回答 1

2

通过使用 SQL Server Service Broker 与“SQL Server 中发生的事情”集成,我获得了出色的结果——不是直接(即作为 Rebus 传输实现),而是作为我可以从外部轮询的消息队列。

每当数据库中发生有趣的事情时,触发器将查询一些表并将结果集选择for xml auto到 XML 消息中,该消息将发送到服务代理队列。

然后我有一个 Rebus 端点,System.Timers.Timer它可以轮询代理队列和bus.SendLocal接收到的 XML 作为字符串 - 这样,从解析 XML 到之后的所有内容都将基于 Rebus 消息、重试和错误队列,以及通常的可靠性如下:)

于 2014-10-21T19:55:36.543 回答