Tôi đang sử dụng hàng đợi xe buýt dịch vụ của Microsoft để xử lý tính toán và chương trình của tôi chạy tốt trong vài giờ nhưng sau đó tôi bắt đầu nhận ngoại lệ này cho mọi thư mà tôi xử lý từ đó trở đi. Tôi không biết phải bắt đầu từ đâu vì mọi thứ đều ổn trong vài giờ đầu tiên. Mã của tôi dường như cũng chính xác. Tôi sẽ đăng các phương pháp mà tôi xử lý các tin nhắn dịch vụ xe buýt azure.Khóa được cung cấp không hợp lệ. Khóa đã hết hạn hoặc thư đã bị xóa khỏi hàng đợi
public static async Task processCalculations(BrokeredMessage message)
{
try
{
if (message != null)
{
if (connection == null || !connection.IsConnected)
{
connection = await ConnectionMultiplexer.ConnectAsync("connection,SyncTimeout=10000,ConnectTimeout=10000");
//connection = ConnectionMultiplexer.Connect("connection,SyncTimeout=10000,ConnectTimeout=10000");
}
cache = connection.GetDatabase();
string sandpKey = message.Properties["sandp"].ToString();
string dateKey = message.Properties["date"].ToString();
string symbolclassKey = message.Properties["symbolclass"].ToString();
string stockdataKey = message.Properties["stockdata"].ToString();
string stockcomparedataKey = message.Properties["stockcomparedata"].ToString();
var sandpTask = cache.GetAsync<List<StockData>>(sandpKey);
var dateTask = cache.GetAsync<DateTime>(dateKey);
var symbolinfoTask = cache.GetAsync<SymbolInfo>(symbolclassKey);
var stockdataTask = cache.GetAsync<List<StockData>>(stockdataKey);
var stockcomparedataTask = cache.GetAsync<List<StockMarketCompare>>(stockcomparedataKey);
await Task.WhenAll(sandpTask, dateTask, symbolinfoTask,
stockdataTask, stockcomparedataTask);
List<StockData> sandp = sandpTask.Result;
DateTime date = dateTask.Result;
SymbolInfo symbolinfo = symbolinfoTask.Result;
List<StockData> stockdata = stockdataTask.Result;
List<StockMarketCompare> stockcomparedata = stockcomparedataTask.Result;
StockRating rating = performCalculations(symbolinfo, date, sandp, stockdata, stockcomparedata);
if (rating != null)
{
saveToTable(rating);
if (message.LockedUntilUtc.Minute <= 1)
{
await message.RenewLockAsync();
}
await message.CompleteAsync(); // getting exception here
}
else
{
Console.WriteLine("Message " + message.MessageId + " Completed!");
await message.CompleteAsync();
}
}
}
catch (TimeoutException time)
{
Console.WriteLine(time.Message);
}
catch (MessageLockLostException locks)
{
Console.WriteLine(locks.Message);
}
catch (RedisConnectionException redis)
{
Console.WriteLine("Start the redis server service!");
}
catch (MessagingCommunicationException communication)
{
Console.WriteLine(communication.Message);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
}
}
CẬP NHẬT: Tôi kiểm tra thời gian cho đến khi hết hạn khóa và tôi gia hạn khóa không có lỗi nhưng tôi vẫn nhận được ngoại lệ này.
timeLeft = message.LockedUntilUtc - DateTime.UtcNow;
if (timeLeft.TotalMinutes <= 2)
{
//Console.WriteLine("Renewed lock! " + ((TimeSpan)(message.LockedUntilUtc - DateTime.UtcNow)).TotalMinutes);
message.RenewLock();
}
catch (MessageLockLostException locks)
{
Console.WriteLine("Delivery Count: " + message.DeliveryCount);
Console.WriteLine("Enqueued Time: " + message.EnqueuedTimeUtc);
Console.WriteLine("Expires Time: " + message.ExpiresAtUtc);
Console.WriteLine("Locked Until Time: " + message.LockedUntilUtc);
Console.WriteLine("Scheduled Enqueue Time: " + message.ScheduledEnqueueTimeUtc);
Console.WriteLine("Current Time: " + DateTime.UtcNow);
Console.WriteLine("Time Left: " + timeLeft);
}
Tất cả tôi biết cho đến nay là mã của tôi chạy tốt cho một lúc và khóa mới được gọi và các công trình nhưng tôi vẫn nhận được ngoại trừ khóa và bên trong ngoại lệ đó, tôi đầu ra các timeleft và nó tiếp tục tăng sự khác biệt thời gian như mã chạy mà làm cho tôi tin rằng thời gian cho đến khi hết hạn khóa không được thay đổi bằng cách nào đó?
Bạn đã bao giờ giải quyết vấn đề này chưa? Nó là cái gì vậy? –
@FyodorSoikin Không cuối cùng tôi đã phải từ bỏ và làm việc trên một phương pháp khác để làm điều tương tự. Từ những gì tôi có thể nói, đó là lỗi trong api nhưng không ai từ Microsoft trả lời bài viết của tôi – user3610374
Bất kỳ cơ hội nào của bạn có thể mất hơn 60 giây để xử lý? – DalSoft