首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BrokeredMessage处理

BrokeredMessage处理
EN

Stack Overflow用户
提问于 2016-03-07 15:25:37
回答 4查看 2.5K关注 0票数 5

我很难将我的BrokeredMessage标记为完整。

工作方式类似于预期的简单代码:

代码语言:javascript
复制
 private void OnMessageArrived(BrokeredMessage message)
 {
     var myObj= message.GetBody<MyObject>();

     //do things with myObj

     message.Complete();            
 }

当我试图等待用户使用myObj完成时,我得到了异常:

已处理经纪消息

代码如下:

代码语言:javascript
复制
 private Dictionary<long, BrokeredMessage> ReceivedMessages;      
 ReceivedMessages = new Dictionary<long, BrokeredMessage>();

 private void OnMessageArrived(BrokeredMessage message)
 {
     var myObj= message.GetBody<MyObject>();
     ReceivedMessages.Add(myObj.Id, message);

     //do things with myObj      
 }

 private void Button_Click(object sender, RoutedEventArgs e)
 {
     // get myObj on which user clicked

     ReceivedMessages[myObj.Id].Complete();
     ReceivedMessages.Remove(myObj.Id);        
 }

在我看来,ServiceBus似乎在某种程度上失去了与c#中实际对象的连接

类似于EF中的分离对象,在本例中,对象与ServiceBus分离。

编辑:

只有在用户单击按钮后才能将消息标记为完整,这对我来说很重要。如果AC下降(或类似的事情),我希望消息仍然保留在服务总线主题上,以便下次用户启动应用程序时,他将再次收到他没有处理的消息。

EN

回答 4

Stack Overflow用户

发布于 2016-03-07 15:46:19

您不应该存储经纪消息本身。当您调用.Complete()方法时,根据文件会发生这样的情况:

完成邮件的接收操作,并指示应将消息标记为已处理和删除。

您应该做的是将MyObject类型的对象存储在字典中,因为代理消息在完成后将被销毁。

代码语言:javascript
复制
private Dictionary<long, MyObject> ReceivedMessages;      
ReceivedMessages = new Dictionary<long, MyObject>();

在相关代码中:

代码语言:javascript
复制
 var myObj= message.GetBody<MyObject>();
 ReceivedMessages.Add(myObj.Id, myObj);
票数 2
EN

Stack Overflow用户

发布于 2017-09-03 07:54:27

据我所知,这是非常隐含的,并且在文档中没有很好地说明,但是当您订阅SB主题/订阅时,您只能访问您提供给BrokeredMessageOnMessage回调委托的执行范围内的SubscriptionClient.OnMessage对象。

一旦回调返回,BrokeredMessage就会被释放。

如果要缓存消息并将其标记为完整/放弃/死信,则应缓存BrokeredMessage.LockToken以及您需要的任何其他属性(如消息正文),并使用

  • SubscriptionClient.Complete
  • SubscriptionClient.Abandon
  • SubscriptionClient.Deadletter

当您想要将LockToken标记为完整时,将它们作为参数接收。

票数 2
EN

Stack Overflow用户

发布于 2018-03-21 07:48:27

我发现,如果您正在执行异步方法,消息将被分派,并且等待发生时,消息已经被释放,这是同一个问题。我只希望能早点找到这篇文章。

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

https://stackoverflow.com/questions/35847496

复制
相关文章

相似问题

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