Tôi khá mới mẻ đối với Spring and Spring Batch, vì vậy hãy hỏi bất kỳ câu hỏi nào rõ ràng nếu bạn có bất kỳ câu hỏi nào.Spring Batch - Không phải tất cả hồ sơ đang được xử lý từ việc truy xuất MQ
Tôi đang gặp sự cố với Spring Batch mà tôi không thể tạo lại trong môi trường thử nghiệm hoặc môi trường địa phương của chúng tôi. Chúng tôi có một công việc hàng ngày kết nối với Websphere MQ thông qua JMS và truy xuất một tập hợp các bản ghi. Công việc này sử dụng JMS ItemReader ngoài hộp. Chúng tôi thực hiện ItemProcessor của riêng mình, nhưng nó không làm bất cứ điều gì đặc biệt khác ngoài việc đăng nhập. Không có bộ lọc hoặc quá trình xử lý nào ảnh hưởng đến bản ghi đến.
Vấn đề là trong số hơn 10.000 bản ghi hàng ngày trên MQ, chỉ khoảng 700 hoặc hơn (số chính xác là khác nhau mỗi lần) thường được đăng nhập vào ItemProcessor. Tất cả các bản ghi được kéo thành công khỏi hàng đợi. Số lượng bản ghi được ghi lại khác nhau mỗi lần và dường như không có mẫu. Bằng cách so sánh các tệp nhật ký với danh sách các bản ghi trong MQ, chúng ta có thể thấy rằng một tập hợp con dường như ngẫu nhiên các bản ghi đang được "xử lý" bởi công việc của chúng tôi. Bản ghi đầu tiên có thể được chọn, sau đó 50 được bỏ qua, sau đó 5 liên tiếp, v.v. Và mô hình khác nhau mỗi khi công việc chạy. Không có ngoại lệ nào được ghi lại.
Khi chạy cùng một ứng dụng trong máy chủ cục bộ và thử nghiệm bằng cùng một tập dữ liệu, tất cả 10.000 bản ghi được truy xuất thành công và được ghi bởi ItemProcessor. Công việc chạy từ 20 đến 40 giây trong Sản xuất (cũng không phải không đổi), nhưng trong thử nghiệm và địa phương phải mất vài phút để hoàn thành (điều này rõ ràng là có ý nghĩa vì nó đang xử lý nhiều bản ghi hơn).
Vì vậy, đây là một trong những vấn đề khó khắc phục sự cố vì chúng tôi không thể tạo lại. Một ý tưởng là triển khai ItemReader của riêng chúng ta và thêm ghi nhật ký để chúng ta có thể xem các bản ghi bị mất trước trình đọc hay sau trình đọc - tất cả những gì chúng ta biết bây giờ là chỉ một tập con của các bản ghi đang được xử lý bởi ItemProcessor. Nhưng ngay cả điều đó sẽ không giải quyết được vấn đề của chúng ta, và nó sẽ có phần kịp thời để thực hiện xem xét nó thậm chí không phải là một giải pháp.
Có ai khác đã gặp sự cố như thế này không? Bất kỳ ý tưởng hoặc đề xuất khắc phục sự cố nào có thể sẽ được đánh giá cao. Dưới đây là một số số phiên bản jar mà chúng tôi đang sử dụng để tham khảo.
- mùa xuân - 3.0.5.RELEASE
- Xuân Integration - 2.0.3.RELEASE
- mùa xuân hàng loạt - 2.1.7.RELEASE
- tích cực MQ - 5.4.2
- Websphere MQ - 7.0.1
Cảm ơn bạn đã nhập trước.
EDIT: Theo yêu cầu, mã cho bộ vi xử lý:
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>
Tôi nghĩ rằng trước khi bất cứ ai có thể giúp bạn, bạn cần một mẫu có thể tái sản xuất tối thiểu. Khác hơn là tất cả chỉ là phỏng đoán: phải có một ngoại lệ ở đâu đó hoặc một tệp nhật ký sẽ cung cấp thêm thông tin. Có chủ đề được barfing, hoặc bạn có WeakReferences cho các đối tượng đang được thu thập rác thải? Tôi có thể so sánh GC với "bỏ qua" để xem liệu các đối tượng có đang được thu thập trước khi họ hoàn thành công việc của họ hay không (khó tin rằng đó có thể là trường hợp nhưng đáng xem). Bạn đang chạy lên chống lại mạng hoặc thời gian chờ khác trong sản xuất? – mttdbrd
Cảm ơn bạn đã nhập @mttdbrd. Tôi biết nó là một phát bắn trong bóng tối, nhưng chúng tôi chỉ không có nhiều thông tin để tiếp tục. Tôi đã hy vọng một người nào đó đã nhìn thấy hành vi tương tự trước đây và có thể chỉ cho tôi đi đúng hướng. Dự đoán tốt nhất của chúng tôi là một số loại vấn đề tương thích giữa Websphere, Spring Batch và/hoặc MQ. Cho đến nay chúng tôi không tìm thấy bất kỳ loại ngoại lệ hoặc lỗi nào trong bất kỳ nhật ký Sản xuất nào của chúng tôi, nhưng tôi sẽ thực hiện một số nghiên cứu bổ sung cho bất kỳ dấu hiệu nào về các vấn đề về thu gom rác thải. Không có dấu hiệu của thời gian chờ trong sản xuất hoặc. –
bạn có thể hiển thị cấu hình lô mùa xuân của bạn và bộ vi xử lý xin vui lòng – Palcente