2015-09-23 3 views
1

EmailQueueListener конфигурацииSpring интеграция Java конфигурации

@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 
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"); 

Я обновил код ба пойте на то, что вы сказали. Но это не работает. Я не мог видеть сообщение, которое я напечатал на консоли в методе Listener. Является ли их что-то неправильно в моей конфигурации

+0

Почему вы вызываете 'rabbitTemplate.receiveAndConvert()' внутри своего слушателя - у него уже есть сообщение. Вы также не показываете, как шаблон подключен к компоненту слушателя. –

ответ

1

Вот еще один вариант, чтобы зарегистрировать любой POJO слушателя:

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

Где PojoListener является:

public class PojoListener { 

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

} 

Для MessageListener реализации следует использовать org.springframework.amqp.support.converter.MessageConverter для извлечения Messagebody и преобразовать его в желаемый объект домена.

+0

Как SimpleMessageListenerContainer знает, какой метод выполнять внутри класса слушателя –

+0

M-m-m. Вы должны указать 'defaultListenerMethod' или использовать' MessageListenerAdapter.ORIGINAL_DEFAULT_LISTENER_METHOD' - 'handleMessage' :-) –

+0

Эй, это не работает для меня. Я обновил свой вопрос с изменениями, которые вы указали. –

Смежные вопросы