मैं एक खिड़कियों सेवा के निर्माण कर रहा हूँ जो एक नियमित अंतराल (एक बार प्रति मिनट) Quartz.netmisfires
का उपयोग करने में एक निर्धारित कार्य जो (लीगेसी सिस्टम से) आदेशों की एक कतार प्रक्रियाओं प्रदर्शन कर रहा है की अनदेखी करने के Quartz.net हो रही हैयदि कार्य 1 मिनट से अधिक समय लेता है, जो कुछ परिस्थितियों में असामान्य लेकिन संभव होगा, तो मैं इसे ट्रिगर्स को मिटाने वाले ट्रिगर्स को अनदेखा करना चाहता हूं।
हालांकि मुझे ऐसा होने वाला प्रतीत नहीं होता है। यह प्रसंस्करण करता है और फिर त्वरित उत्तराधिकार में चूकने वाले सभी ट्रिगर्स को तेज़ी से निकाल देता है। जैसा कि मैं समझता हूं कि आप मिस्फीर्स के लिए सीमा तय कर सकते हैं लेकिन मुझे यह काम करने में सक्षम नहीं लगता है।
मैं नौकरी पर [DisallowConcurrentExecution()] का उपयोग कर रहा हूं यह सुनिश्चित करने के लिए कि नौकरी का केवल एक उदाहरण किसी भी समय चल रहा है।
नीचे कुछ स्निपेट हैं। पहले कुछ कॉन्फ़िगरेशन जानकारी में गुजर रहा है - क्या आप मिस्फीयर थ्रेसहोल्ड सेट करते हैं?
var trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartNow()
.WithSimpleSchedule( x => x.WithMisfireHandlingInstructionIgnoreMisfires()
.WithIntervalInSeconds(60)
.RepeatForever())
.Build();
विचार बहुत सराहना:
NameValueCollection config = new NameValueCollection();
config.Add("quartz.jobStore.misfireThreshold", "600000");
schedFact = new StdSchedulerFactory(config);
मैं क्या मान के साथ एक ट्रिगर बिल्डिंग पर ध्यान न दें misfires की सही सेटिंग होने के लिए।
नौकरी के लिए कोड: बस इस बिंदु पर किसी न किसी विचार के साथ खेल रहा है तो बस एक कंसोल ऐप में चल रहा है और यादृच्छिक रूप से नौकरी में देरी कर रहा है, इसलिए यह अंतराल पर शूट हो जाता है जो इसके लिए 10 सेकंड पर सेट होता है। कुछ देरी के बाद त्वरित उत्तराधिकार में सभी समर्थित अपवादियों की आग लग गई।
[DisallowConcurrentExecution()]
public class SomeJob : IJob
{
public SomeJob() { }
public void Execute(IJobExecutionContext context)
{
Random rnd = new Random(DateTime.UtcNow.Second);
int delay = rnd.Next(2);
Console.WriteLine("Executing Job with delay of "+ delay + " at " + DateTime.UtcNow.ToString());
if (delay == 1)
{
System.Threading.Thread.Sleep(1000 * 25); // sleep for 25 seconds
}
}
}
Example console output:
Executing Job with delay of 1 at 21/05/2015 21:27:17
Executing Job with delay of 1 at 21/05/2015 21:27:42
Executing Job with delay of 0 at 21/05/2015 21:28:07 <-- stacked misfires
Executing Job with delay of 0 at 21/05/2015 21:28:07 <--
Executing Job with delay of 0 at 21/05/2015 21:28:07 <--
Executing Job with delay of 0 at 21/05/2015 21:28:07 <--
Executing Job with delay of 0 at 21/05/2015 21:28:16
Executing Job with delay of 0 at 21/05/2015 21:28:26
Executing Job with delay of 1 at 21/05/2015 21:28:36
Executing Job with delay of 0 at 21/05/2015 21:29:01
Executing Job with delay of 0 at 21/05/2015 21:29:01
Executing Job with delay of 1 at 21/05/2015 21:29:06
क्या आप अपनी नौकरी के लिए कोड पेस्ट कर सकते हैं? – LeftyX
देखने के लिए धन्यवाद - मैंने नौकरी से कोड के साथ मूल पोस्ट को अपडेट किया है। –
बेवकूफ सवाल: आपका ट्रिगर हर मिनट में आग लगने पर हर 30 सेकंड में आपकी नौकरी कैसे आग लग सकती है? – LeftyX