我正在设置服务代理来执行一些异步作业。我必须接收消息的过程调用另一个执行大量工作的存储过程,并且我在事务中导致一些锁定问题。这个例子,我已经从https://sqlperformance.com/2014/03/sql-performance/configuring-service-broker模仿了这个,但我想知道从处理消息的过程中删除事务是否是一个坏主意。
答案 0 :(得分:0)
您不需要显式事务,但要了解如果在RECEIVE
语句发生后将其删除,则会永久删除队列中的消息。
与您使用交易的情况形成对比。如果激活过程在RECEIVE
之后但在包含它的事务完成之前中止,则消息将被放回队列的顶部。
当然,你必须要小心有毒信息,但至少你不会在场内丢弃信息。