【问题标题】:Serialization of Azure Service Bus BrokeredMessageAzure 服务总线 BrokeredMessage 的序列化
【发布时间】:2014-12-08 09:47:42
【问题描述】:

我有一个无状态的 RESTful 服务,它将 Peek & Lock 关闭 Azure 服务总线队列。收到消息后,它会将消息转发给将要处理它的客户端。客户端可能需要比锁定超时时间更长的时间来处理消息。

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

那么,如何序列化 BrokeredMessage 以便在反序列化后更新其锁定?

或者,我是否可以通过某种方式获取 BrokeredMessage 的令牌,以便我可以仅使用该令牌(而不是整个消息)来更新锁定或从队列中删除消息?

【问题讨论】:

    标签: c# .net azure-servicebus-queues


    【解决方案1】:

    根据 Azure 服务总线 REST API reference,更新操作需要 MessageId 和 LockToken,这两者都可用作 BrokeredMessage 对象的属性。您应该能够使用它们来触发 REST 请求以更新您的锁定。

    【讨论】:

      【解决方案2】:

      你只需要放弃一条消息就是锁定令牌,它只是一个 Guid,所以它可以很好地序列化。使用 Azure 服务总线 SDK(通过 NuGet),如果在队列中连续运行多次且其中包含一条消息,则以下测试将通过。如果您删除 queueClient.Abandon(lockToken) 行,那么测试将在第一次之后的每次运行中失败,直到锁定超时(默认为 1 分钟)。这是因为 brokeredMessage 为 null,因为只要队列中的一条消息已被锁定,就没有可接收的消息。

      [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);
      }
      

      【讨论】:

      • 我确实在不同进程中使用 QueueClients 对此进行了测试,以确保两个 QueueClients 共享连接或其他东西时不会发生任何微妙的事情,观察到与此示例中相同的行为。
      • 不幸的是,只有锁定令牌可以通过 SDK 进行删除和延迟。其余的操作需要一个 BrokeredMessage 才能工作(如 Complete、Renew 等)
      猜你喜欢
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-14
      • 2018-06-27
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多