Spring 集成 java 配置

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
 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 方法中打印到控制台的消息。他们在我的配置中有什么问题吗

这是注册任何 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 并将其转换为所需的域对象。