代码之家  ›  专栏  ›  技术社区  ›  lch

Spring集成java配置

  •  1
  • lch  · 技术社区  · 10 年前

    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
     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;
        }
    
    }
    

    发件人

    rabbitTemplate.convertAndSend("hello");
    

    我根据你说的更新了代码。但这行不通。我看不到在Listener方法中打印到控制台的消息。我的配置有什么问题吗

    1 回复  |  直到 10 年前
        1
  •  1
  •   Artem Bilan    10 年前

    下面是注册任何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 提取 Message body 并将其转换为期望的域对象。