초당 최대 500 개 이상의 메시지를 처리 중입니다. 동시 사용자가 10 명인 SimpleMessageListenerContainer를 사용하여 Spring AMQP + Rabbit에서 데이터가 소비되므로 매 15 시간마다 일부 검사를 수행해야합니다. mins로 설정하고 처리를 위해 특정 속성을 다시로드합니다.이 작업은 15 분마다 발생하는 Quartz 트리거로 수행되고 SimplelistenerContainer를 중지하고 필요한 작업을 수행하고 컨테이너를 다시 시작합니다.Spring AMQP - 중복 메시지
응용 프로그램이 시작될 때 트리거가 실행되고 컨테이너가 다시 시작될 때 모든 것이 완벽하게 작동합니다. 동일한 메시지가 여러 번 전달되는 것을 볼 수 있습니다. 이로 인해 많은 중복이 발생합니다. 소비자가 쏟아내는 예외는 없습니다. 응용 프로그램 시작시
메시지 리스너
class RoundRobinQueueListener implements MessageListener {
@Override
public void onMessage(Message message) { //do processing
}
}
병렬 소비자를 설정하고 소비자
final SimpleMessageListenerContainer messageListenerContainer = new SimpleMessageListenerContainer(connectionFactory);
RoundRobinQueueListener roundRobinListener = RoundRobinQueueListener.class.newInstance();
messageListenerContainer.setQueueNames(queueName);
messageListenerContainer.setMessageListener(roundRobinListener);
messageListenerContainer.setConcurrentConsumers(10);
messageListenerContainer.setChannelTransacted(true);
석영 트리거를 시작
void execute(JobExecutionContext context) throws JobExecutionException {
messageListenerContainer.stop()
//Do db task, other processing
messageListenerContainer.start()
}
안녕하세요, 우리는 이것을 도와 줄 일부 코드와 구성을보아야 할 것입니다. 관련 Spring 설정은 Quartz 작업 코드뿐만 아니라 시작하기에 좋은 곳이 될 것이다. –
코드 샘플을 추가하기 위해 원래의 질문을 수정했습니다. 코드 구조가 다소 달라졌습니다. – winash
일부 디버깅 결과 스트림 초기화에 버그가 있음을 알게되었고, 토끼를 잘못 비난했습니다. 도움을 주셔서 감사합니다. – winash