3

我们希望能够在存储项目状态的服务总线队列代理消息中保存一个属性;因此,无论出于何种原因重新处理一个项目,我们都有一个记录表明它在流程中的位置(改进我们的重试逻辑)。

所以我们有下面的代码从队列中取出一个项目:

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

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

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

是否可以像这样在代理消息中保留新/更新属性,是否必须调用其他方法,或者对属性所做的任何更改在收到后是否会丢失?

4

1 回答 1

3

今天,我们无法更新队列中的现有代理消息。您可以将属性添加到现有的代理消息,但仅当您对消息本身执行AbandonDeadLetter操作时。请参阅http://msdn.microsoft.com/en-us/library/windowsazure/jj673129.aspx

我们确实支持您希望通过MessageSession. 在这里,您基本上启用Sessions了队列/订阅,而不是处理您调用的消息AcceptMessageSession。消息的SessionID属性将确定它属于哪个会话。每个会话都有一个可用的状态,您可以通过GetStateSetStateon访问MessageSession。此外,所有这些操作都支持事务,以提供强大的一致性保证。以下是演示会话和会话状态使用的示例:http: //code.msdn.microsoft.com/Brokered-Messaging-Session-41c43fb4

于 2013-07-12T21:39:21.440 回答