我们希望能够在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属性,是否需要调用其他方法,或者在收到属性后对其进行的任何更改是否会丢失?
答案 0 :(得分:3)
今天我们没有能力在队列中更新和现有的代理消息。您可以向现有的代理邮件添加属性,但仅限于对邮件本身执行Abandon
或DeadLetter
操作时。见http://msdn.microsoft.com/en-us/library/windowsazure/jj673129.aspx
我们支持您希望通过MessageSession
存储工作流程/消息组的进度的方案。这里基本上为队列/订阅启用Sessions
,然后处理您调用AcceptMessageSession
的邮件。消息的SessionID
属性将确定它属于哪个会话。每个会话都有一个状态,您可以通过GetState
上的SetState
和MessageSession
访问该状态。此外,所有这些操作都支持事务,以实现强一致性保证。以下是演示会话和会话状态使用的示例:
http://code.msdn.microsoft.com/Brokered-Messaging-Session-41c43fb4