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