已在Azure Service Bus队列上更新Brokered消息

时间:2013-07-11 12:12:34

标签: c# azure client azureservicebus

我们希望能够在Service Bus Queue Brokered Message中保存一个属性,该消息存储项目的状态;因此,在某个项目因任何原因被重新处理的情况下,我们会有一个记录,指示它在进程中的位置(改进我们的重试逻辑)。

所以我们有以下代码从队列中提取项目:

var brokeredMessage = 
    _queueClient.Receive(TimeSpan.FromSeconds(DEFAULT_WAIT_TIME_IN_SECONDS));

然后我们要调整一个属性,使其保持状态枚举,如下所示:

brokeredMessage.Properties.Add("Status", MessageStatusEnum.MessageReceived);

是否可以在像这样的Brokered Message中持久保存新的/ update属性,是否需要调用其他方法,或者在收到属性后对其进行的任何更改是否会丢失?

1 个答案:

答案 0 :(得分:3)

今天我们没有能力在队列中更新和现有的代理消息。您可以向现有的代理邮件添加属性,但仅限于对邮件本身执行AbandonDeadLetter操作时。见http://msdn.microsoft.com/en-us/library/windowsazure/jj673129.aspx

我们支持您希望通过MessageSession存储工作流程/消息组的进度的方案。这里基本上为队列/订阅启用Sessions,然后处理您调用AcceptMessageSession的邮件。消息的SessionID属性将确定它属于哪个会话。每个会话都有一个状态,您可以通过GetState上的SetStateMessageSession访问该状态。此外,所有这些操作都支持事务,以实现强一致性保证。以下是演示会话和会话状态使用的示例: http://code.msdn.microsoft.com/Brokered-Messaging-Session-41c43fb4