我想通过向该应用程序的数据库添加触发器来使用Rebus与第三方应用程序集成,因此触发器将以Rebus消息的格式插入记录,其中包含有关数据库更改的信息(操作类型:insert,更新,删除,表名和行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方法自定义传输以自己的格式接受消息?
提前致谢:)
答案 0 :(得分:2)
通过使用SQL Server Service Broker集成了“在SQL Server中发生的事情”,并没有直接(即作为Rebus传输实现),而是作为我可以从外部轮询的消息队列。 / p>
只要数据库中发生了一些有趣的事情,触发器就会查询某些表并将结果集for xml auto
选择为一条将发送到服务代理队列的XML消息。
然后我有一个带有System.Timers.Timer
的Rebus端点,它将轮询代理队列并将接收到的XML bus.SendLocal
作为字符串 - 这样,解析XML的所有内容都将基于Rebus消息,重试和错误队列,以及随后的习惯可靠性:)