나는이 게시물을 통해 몇 달 전에 기본적으로 같은 질문을했다 : How should a Spring JMS listener handle a message with an empty payload?,하지만 나는 내가 원하는 것을하기 위해 내 청취자를 다시 쓰는 것을 제안하는 희박한 의견이었다. 유효한 진술이지만, 아직도 봄 - 부트를 이해할 때 눈에 잘 띄지 않습니다. 나는 그때부터 배웠으며이 질문에 대해 직접적으로 다시 물어보고 싶습니다 (이전 것에 현상금을내는 것과 반대).Spring JMSListener - 빈 페이로드를 어떻게 처리해야합니까?
나는 @Configuration
과 @EnableJms
와 주석 빈 클래스를 설정하고 내 컨테이너 공장과 같이 보인다 :
@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(mqConnectionFactory());
factory.setDestinationResolver(destinationResolver());
factory.setConcurrency("1");
factory.setErrorHandler(errorHandler());
factory.setSessionTransacted(true);
factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
return factory;
}
그리고 리스너는 다음과 같습니다 주석 일단 내가 알고있는 것처럼
@JmsListener(id = "qID", destination = "qName")
public void processOrder(String message) {. . .}
bean 클래스가 실행되면 JMSListener
이 기본적으로 시작됩니다 (autoStartup
을 false로 설정하지 않은 경우). 그래서 어디서 어떻게 제어 할 수 있는지 이해하지 못합니다. JmsListener
가지를 처리합니다. 내 관점에서 볼 때 "그냥 실행"합니다. 따라서 대기열에 "\n"
이 있거나 빈 문자열 만있는 경우 리스너는 예외를 throw합니다. 특히 org.springframework.messaging.converter.MessageConversionException: No converter found to convert to class java.lang.String
. 그리고이 예외는 무대 뒤에서 발생합니다. 나는 청취자
내가 SimpleMessageConverter
로 보였지만, 나를 setIgnoreStringPattern()
같은 말을 할 수 있도록 할 수있는 모든 작업을 볼 것 같지 않았다 안에 아무것도 실행 할 수있는 기회를 결코 . 그건 분명히 존재하지 않지만 그것이 필요한 것입니다. 내가 뭘 놓치고 있니? JmsListener
에 특정 문자열을 무시하도록 지시하는 방법이 있습니까?
빈 메시지를 지원해야하는 이유에 대해 좀 더 설명 할 수 있습니까? –
@ JohnK. 따라서 우리는 다른 응용 프로그램이 작성하는 IBM WebSphere MQ 대기열이 있습니다. 청취자는 오류 대기열을 계속 확인해야합니다. 오류 대기열에는 매우 이상한 메시지가 들어 있습니다. 내 애플 리케이션은 쓸모없는 메시지를 식별함으로써 그것을 해결하기위한 것입니다. 가져서는 안되는 대기열에 들어가는 개행 문자와 같습니다. –
다른 사람이 대기열에 쓰는 내용을 제어 할 수 있다면 가장 좋은 대답은 다른 응용 프로그램이 유효한 메시지를 작성하는지 확인하는 것입니다. 어떤 경우에 당신이 그들을 통제 할 수 없다면, 신경 쓰지 마라. –