से सभी रिकॉर्ड संसाधित नहीं किए जा रहे हैं मैं वसंत और स्प्रिंग बैच के लिए काफी नया हूं, इसलिए यदि आपके पास कोई स्पष्टीकरण प्रश्न पूछने के लिए स्वतंत्र महसूस करें।स्प्रिंग बैच - एमक्यू पुनर्प्राप्ति
मुझे स्प्रिंग बैच के साथ कोई समस्या दिखाई दे रही है कि मैं अपने परीक्षण या स्थानीय वातावरण में पुन: निर्माण नहीं कर सकता। हमारे पास एक दैनिक नौकरी है जो जेएसएमएस के माध्यम से वेबस्पेयर एमक्यू से जुड़ती है और रिकॉर्ड्स का एक सेट पुनर्प्राप्त करती है। यह नौकरी आउट ऑफ़ द बॉक्स जेएमएस मदर रीडर का उपयोग करती है। हम अपने स्वयं के आइटमप्रोसेसर को लागू करते हैं, लेकिन यह लॉगिंग के अलावा कुछ भी विशेष नहीं करता है। कोई फ़िल्टर या प्रसंस्करण नहीं है जो आने वाले रिकॉर्ड को प्रभावित करे।
समस्या यह है कि एमक्यू पर 10,000+ दैनिक रिकॉर्डों में से केवल 700 या उससे अधिक (सटीक संख्या प्रत्येक बार अलग होती है) आमतौर पर आइटमप्रोसेसर में लॉग इन होती है। सभी रिकॉर्ड सफलतापूर्वक कतार से खींचा जाता है। लॉग इन रिकॉर्ड्स की संख्या हर बार अलग होती है और ऐसा लगता है कि कोई पैटर्न नहीं है। एमक्यू में रिकॉर्ड्स की सूची के खिलाफ लॉग फाइलों की तुलना करके, हम देख सकते हैं कि रिकॉर्ड के प्रतीत होता है कि यादृच्छिक सबसेट हमारे काम से "संसाधित" हो रहा है। पहला रिकॉर्ड उठाया जा सकता है, फिर 50 छोड़ दिए जाते हैं, फिर 5 पंक्ति में इत्यादि। और जब भी नौकरी चलती है तो पैटर्न अलग होता है। कोई अपवाद लॉग इन नहीं है।
स्थानीयहोस्ट में एक ही ऐप चलाते समय और उसी डेटा सेट का उपयोग करके परीक्षण करते समय, सभी 10,000+ रिकॉर्ड सफलतापूर्वक पुनर्प्राप्त और आइटमप्रोसेसर द्वारा लॉग इन किए जाते हैं। यह काम उत्पादन में 20 से 40 सेकेंड के बीच चलता है (स्थिर भी नहीं), लेकिन परीक्षण और स्थानीय में इसे पूरा करने में कई मिनट लगते हैं (जो स्पष्ट रूप से समझ में आता है क्योंकि यह बहुत अधिक रिकॉर्ड प्रबंधित कर रहा है)।
तो यह समस्या निवारण के लिए उन कठिन मुद्दों में से एक है क्योंकि हम इसे फिर से नहीं बना सकते हैं। सब अब हम जानते हैं यह है कि केवल रिकॉर्ड के सबसेट ItemProcessor द्वारा नियंत्रित किया जा रहा है - एक विचार हमारे अपने ItemReader को लागू करने और अतिरिक्त लॉगिंग जोड़ने अगर रिकॉर्ड पाठक से पहले या पाठक के बाद खो रहा है कर रहे हैं ताकि हम देख सकते हैं करने के लिए है। लेकिन यहां तक कि इससे हमारी समस्या का समाधान नहीं होगा, और यह लागू करने के लिए कुछ हद तक समय पर होगा क्योंकि यह समाधान भी नहीं है।
क्या किसी और ने इस तरह कोई मुद्दा देखा है? किसी भी संभावित विचार या समस्या निवारण सुझावों की बहुत सराहना की जाएगी। यहां कुछ जार संस्करण संख्याएं हैं जिनका हम संदर्भ के लिए उपयोग कर रहे हैं।
- स्प्रिंग - 3.0.5.RELEASE
- स्प्रिंग एकता - 2.0.3.RELEASE
- वसंत बैच - 2.1.7.RELEASE
- सक्रिय MQ - 5.4.2
- Websphere MQ - 7.0.1
आपके इनपुट के लिए अग्रिम धन्यवाद।
संपादित करें:
public SMSReminderRow process(Message message) throws Exception {
SMSReminderRow retVal = new SMSReminderRow();
LOGGER.debug("Converting JMS Message to ClaimNotification");
ClaimNotification notification = createClaimNotificationFromMessage(message);
retVal.setShortCode(BatchCommonUtils
.parseShortCodeFromCorpEntCode(notification.getCorpEntCode()));
retVal.setUuid(UUID.randomUUID().toString());
retVal.setPhoneNumber(notification.getPhoneNumber());
retVal.setMessageType(EventCode.SMS_CLAIMS_NOTIFY.toString());
DCRContent content = tsContentHelper.getTSContent(Calendar
.getInstance().getTime(),
BatchCommonConstants.TS_TAG_CLAIMS_NOTIFY,
BatchCommonConstants.TS_TAG_SMSTEXT_TYP);
String claimsNotificationMessage = formatMessageToSend(content.getContent(),
notification.getCorpEntCode());
retVal.setMessageToSend(claimsNotificationMessage);
retVal.setDateTimeToSend(TimeUtils
.getGMTDateTimeStringForDate(new Date()));
LOGGER.debug(
"Finished processing claim notification for {}. Writing row to file.",
notification.getPhoneNumber());
return retVal;
}
JMS config: अनुरोध, प्रोसेसर के लिए कोड प्रति
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<bean id="claimsQueueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jms/SMSClaimNotificationCF" />
<property name="lookupOnStartup" value="true" />
<property name="cache" value="true" />
<property name="proxyInterface" value="javax.jms.ConnectionFactory" />
</bean>
<bean id="jmsDestinationResolver"
class="org.springframework.jms.support.destination.DynamicDestinationResolver">
</bean>
<bean id="jmsJndiDestResolver"
class=" org.springframework.jms.support.destination.JndiDestinationResolver"/>
<bean id="claimsJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="claimsQueueConnectionFactory" />
<property name="defaultDestinationName" value="jms/SMSClaimNotificationQueue" />
<property name="destinationResolver" ref="jmsJndiDestResolver" />
<property name="pubSubDomain">
<value>false</value>
</property>
<property name="receiveTimeout">
<value>20000</value>
</property>
</bean>
मुझे लगता है कि कोई भी आपकी मदद कर सकता है इससे पहले कि आपको कम से कम पुनरुत्पादित नमूना की आवश्यकता हो। इसके अलावा यह सब सिर्फ अनुमान है: कहीं अपवाद होना चाहिए या एक लॉग फ़ाइल जो अधिक जानकारी देगी। क्या वहां धागे हैं जो बार्फ़िंग कर रहे हैं, या क्या आपके पास ऑब्जेक्ट्स के वीक रेफरेंस हैं जो कचरा जा रहे हैं? मैं जीसी की तुलना "स्किप" के साथ कर सकता हूं ताकि यह देखने के लिए कि ऑब्जेक्ट्स को अपना काम पूरा करने से पहले एकत्र किया जा रहा है (विश्वास करना मुश्किल है कि यह मामला होगा लेकिन एक लायक है)। क्या आप उत्पादन में नेटवर्क या अन्य टाइमआउट के खिलाफ चल रहे हैं? – mttdbrd
इनपुट @mttdbrd के लिए धन्यवाद। मुझे पता है कि यह अंधेरे में एक शॉट है, लेकिन हमारे पास जाने के लिए बहुत अधिक जानकारी नहीं है। मैं उम्मीद कर रहा था कि किसी ने पहले समान व्यवहार देखा होगा और मुझे सही दिशा में इंगित कर सकता है। हमारा सबसे अच्छा अनुमान वेबस्पेयर, स्प्रिंग बैच और/या एमक्यू के बीच कुछ प्रकार की संगतता समस्या है। अब तक हमें हमारे किसी भी उत्पादन लॉग में किसी भी प्रकार के अपवाद या त्रुटियां नहीं मिली हैं, लेकिन कचरा संग्रह के साथ समस्याओं के किसी भी संकेत के लिए मैं कुछ अतिरिक्त शोध करूँगा। उत्पादन में टाइमआउट का कोई संकेत नहीं है। –
क्या आप अपनी वसंत बैच कॉन्फ़िगरेशन और प्रोसेसर को – Palcente