I had the same problem, and after some research and testing that I found out, there is more than one way to configure RabbitMQ-Receiver in SpringBoot, but it is important to choose one and stick to it.
, , @EnableRabbit @RabbitListener, . :
org.springframework.amqp.rabbit.annotation.RabbitListenerConfigurer configureRabbitListeners :
@Override
public void configureRabbitListeners(
RabbitListenerEndpointRegistrar registrar) {
registrar.setMessageHandlerMethodFactory(myHandlerMethodFactory());
}
MessageHandlerFactory:
@Bean
public DefaultMessageHandlerMethodFactory myHandlerMethodFactory() {
DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory();
factory.setMessageConverter(new MappingJackson2MessageConverter());
return factory;
}
, SimpleRabbitListenerContainerFactory ( ) Autowire ConnectionFactory:
@Autowired
public ConnectionFactory connectionFactory;
@Bean
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory() {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setConcurrentConsumers(3);
factory.setMaxConcurrentConsumers(10);
return factory;
}
, Bean, @RabbitListerner-Annotations. EventResultHandler ( TestService):
@Bean
public EventResultHandler eventResultHandler() {
return new EventResultHandler();
}
EventResultHandler ( TestService) @RabbitListener- (= POJO, JSON- ):
@Component
public class EventResultHandler {
@RabbitListener(queues=Queues.QUEUE_NAME_PRESENTATION_SERVICE)
public void handleMessage(@Payload Event event) {
System.out.println("Event received");
System.out.println("EventType: " + event.getType().getText());
}
}
- Microservice, RabbitMQ-Server ... .