首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure服务总线BrokeredMessage的序列化

Azure服务总线BrokeredMessage的序列化
EN

Stack Overflow用户
提问于 2014-10-25 19:59:04
回答 2查看 1.3K关注 0票数 0

我有一个无状态的RESTful服务,它将从Azure服务总线队列中窥探和锁定。当它得到消息后,它将把消息转发给将处理它的客户端。客户端处理消息的时间可能会超过锁定超时时间。

客户端不能直接与队列对话,我希望不向服务添加任何状态。相反,我希望向客户端发送足够的信息,以便他们可以将其发回,并且服务可以代表他们更新锁。

那么,我如何序列化一个BrokeredMessage,以便在反序列化它之后可以更新它的锁呢?

或者,是否有方法可以为BrokeredMessage获取令牌,以便只使用该令牌(而不是整个消息)来更新锁或从队列中删除消息?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-06 11:08:22

根据Azure REST引用,更新操作需要MessageId和LockToken,它们都可以作为BrokeredMessage对象的属性使用。您应该能够使用这些来触发REST请求来更新您的锁。

票数 2
EN

Stack Overflow用户

发布于 2014-12-08 01:47:42

您所需要放弃的消息就是锁令牌,它只是一个Guid,因此它很好地序列化了。使用(通过NuGet),如果在一个包含一条消息的队列中多次运行,下面的测试将通过。如果删除queueClient.Abandon(lockToken)行,那么每次运行之后,测试都会失败,直到锁超时为止(1分钟默认)。这是因为brokeredMessage是空的,因为只要队列中的一条消息上有一个锁,就没有可接收的消息。

代码语言:javascript
复制
[Fact]
public void receive_lock_abandon()
{
    const String connectionString = "Endpoint=sb://stayupdated.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=X/LX7IFHLADiAMgn5zGoSlCYCriwa68An1hijB3rGXQ=";
    const String queueName = "TestQueue";

    var receiveClient = QueueClient.CreateFromConnectionString(connectionString, queueName);
    var brokeredMessage = receiveClient.Receive(TimeSpan.FromSeconds(1));
    var serializedLockToken = brokeredMessage.LockToken.ToString();

    var lockToken = Guid.ParseExact(serializedLockToken, "D");
    var queueClient = QueueClient.CreateFromConnectionString(connectionString, queueName);
    queueClient.Abandon(lockToken);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26566647

复制
相关文章

相似问题

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