से हटा दिया गया है, मैं गणना प्रक्रिया को संसाधित करने के लिए एक Microsoft Azure सेवा बस कतार का उपयोग कर रहा हूं और मेरा प्रोग्राम कुछ घंटों के लिए ठीक चलाता है लेकिन फिर मुझे प्रत्येक संदेश के लिए यह अपवाद प्राप्त करना शुरू होता है कि मैं तब से प्रक्रिया करता हूं। मेरे पास कोई सुराग नहीं है जहां से शुरू करना है क्योंकि सबकुछ पहले कुछ घंटों के लिए ठीक है। मेरा कोड भी सटीक प्रतीत होता है। मैं उस विधि को पोस्ट करूंगा जहां मैं एज़ूर सेवा बस संदेश को संभालता हूं।आपूर्ति की गई लॉक अमान्य है। या तो लॉक समाप्त हो गया है, या संदेश को पहले से ही कतार
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);
}
}
अद्यतन: मैं ताला समाप्ति तक समय की जाँच करें और मैं फोन करता है, तो यह है कि यह जरूरत है, लेकिन यह कोई त्रुटि के साथ ताला नवीनिकृत लेकिन मैं अभी भी यह अपवाद हो रही है नवीनीकृत ताला।
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);
}
सभी मैं अब तक जानता हूँ कि मेरे कोड कुछ समय के लिए ठीक चलाता है और नवीनीकृत ताला कहा जाता हो जाता है और काम करता है लेकिन मैं अभी भी ताला अपवाद हो रही है और कहा कि अपवाद के अंदर, मैं उत्पादन timeleft है और यह बढ़ती रहती है कोड अंतर के रूप में समय अंतर जो मुझे विश्वास दिलाता है कि समय तक लॉक समाप्ति को किसी भी तरह बदला नहीं जा रहा है?
क्या आपने कभी इसे हल किया है? यह क्या था? –
@FyodorSoikin नहीं, मुझे अंततः एक ही काम करने के लिए एक अलग विधि को छोड़ना और काम करना पड़ा। जो मैं बता सकता हूं, यह एपीआई में एक बग है लेकिन माइक्रोसॉफ्ट के किसी ने कभी भी मेरी पोस्ट का जवाब नहीं दिया – user3610374
किसी भी मौके से आपके व्यक्तिगत संदेशों में से कोई भी प्रक्रिया 60 सेकंड से अधिक समय तक ले सकता है? – DalSoft