lch
lch

Reputation: 4941

Spring integration java config

EmailQueueListener

@Component
public class EmailQueueListener{

    public String handleMessage(String string) {
        System.out.println("Message printing");  // this was printed several times
        System.out.println(rabbitTemplate.receiveAndConvert());  //received null here
        return string;
    }
}

configuration

 @Configuration
 public class RabbitMQConfiguration {

    @Bean
    public ConnectionFactory connectionFactory() {
        CachingConnectionFactory connectionFactory =
            new CachingConnectionFactory("localhost");
        return connectionFactory;
    }

    @Bean
    public AmqpAdmin amqpAdmin() {
        RabbitAdmin admin=new RabbitAdmin(connectionFactory());
        admin.declareQueue(queue());
        return admin;
    }

    @Bean
    public RabbitTemplate rabbitTemplate() {
        RabbitTemplate rabbitTemplate=new RabbitTemplate(connectionFactory());
        rabbitTemplate.setRoutingKey("eventsQueue");
        rabbitTemplate.setQueue("eventsQueue");
        return rabbitTemplate;
    }

    @Bean
    public Queue queue() {
       return new Queue("eventsQueue");
    }

    @Bean
    @Autowired
    public SimpleMessageListenerContainer messageListenerContainer(EmailQueueListener listener){
        SimpleMessageListenerContainer container=new SimpleMessageListenerContainer(connectionFactory());
        MessageListenerAdapter adapter=new MessageListenerAdapter(listener, "handleMessage");
        container.setMessageListener(adapter);
        container.addQueues(queue());
        return container;
    }

}

Sender

rabbitTemplate.convertAndSend("hello");

I updated the code basing on what you said. But this is not working. i could not see the message which i printed to the console in Listener method. Is their anything wrong in my configuration

Upvotes: 1

Views: 512

Answers (1)

Artem Bilan
Artem Bilan

Reputation: 121552

Here is another option to register any POJO listener:

@Bean
public SimpleMessageListenerContainer serviceListenerContainer() {
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
    container.setConnectionFactory(rabbitConnectionFactory());
    container.setQueues(requestQueue());
    container.setMessageListener(new MessageListenerAdapter(new PojoListener()));
    return container;
}

Where PojoListener is:

public class PojoListener {

    public String handleMessage(String foo) {
        return foo.toUpperCase();
    }

}

For the MessageListener implementation you should use org.springframework.amqp.support.converter.MessageConverter to extract Message body and convert it to desired domain object.

Upvotes: 1

Related Questions