首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server死锁

Server死锁
EN

Stack Overflow用户
提问于 2016-07-21 14:02:31
回答 1查看 1.2K关注 0票数 0

我在调查一个我没有建立的过程。它使用service创建一个联系人队列,然后需要对它们执行一个操作。

然后有一个处理程序接收10k记录并将它们传递给存储过程以进行处理。

如果最终进程在没有错误处理的情况下死锁失败,会发生什么情况?这些会不会重新进入队列?如果没有,我需要做些什么才能让他们重新排队呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-21 19:42:40

可以从事务内访问Service队列。因此,如果您在代码中这样做(下面是伪代码;实际健壮的service代码有点超出了您的问题范围):

代码语言:javascript
复制
begin tran
   receive top(10000) message_body
   into @table
   from dbo.yourQueue;

   while(1=1)
   begin
      select top(1) @message = message
      from @table;
      if (@message is null)
         break;
      exec dbo.processMessage @message;
   end
commit tran

…那你就准备好了。我的意思是,只要您在同一个事务中执行receive并进行处理,任何故障(包括死锁)都会回滚事务并将消息重新放到队列中。但是,确保你读到了有毒信息的处理!如果得到太多的回滚,SQL将假设存在不可处理的消息并关闭队列。这真是糟糕的一天。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38506392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档