我写了以下配置:
@Slf4j
@Configuration
@EnableConfigurationProperties(BatchProperties.class)
public class BatchConfiguration {
@Autowired
private BatchProperties properties;
@Bean
public PollableAmqpChannel testingChannel(final RabbitTemplate rabbitTemplate) {
final PollableAmqpChannel channel = new PollableAmqpChannel(properties.getQueue(), rabbitTemplate);
channel.setLoggingEnabled(false);
return channel;
}
@Bean
@ServiceActivator(inputChannel = "testingChannel", poller = @Poller(fixedRate = "1000", maxMessagesPerPoll = "1"))
public MessageHandler messageHandler(final RabbitTemplate rabbitTemplate) {
return message -> {
log.info("Received: {}", message);
rabbitTemplate.convertAndSend(properties.getQueue(), message);
};
}
}
消息成功读取并重新排队,但我不断收到以下消息:
使用PollableAmqpChannel上的超时值调用receive。该 超时将被忽略,因为不支持接收超时。
我正在使用Spring Boot 1.5.3.RELASE。
我提出了一个断点:
@Override
public void setLoggingEnabled(boolean loggingEnabled) {
this.loggingEnabled = loggingEnabled;
}
在AbstractAmqpChannel
课程中。它被调用'false'(因为它应该根据我的配置)然后每次轮询消息时它再次被调用并且它被设置为'true'。
我检查了哈希码,看起来它是我的bean,但是'loggingEnabled'被每条消息重置为'true'。
我的配置有问题,我该如何解决?
答案 0 :(得分:1)
它看起来像一个错误 - 如果你在类路径上有spring-integration-jmx
,或者在你的一个配置类上指定@EnableIntegrationManagement
; IntegrationManagementConfigurer
bean将所有IntegrationManagement
实现的日志记录设置为true,覆盖您的设置。
请打开JIRA Issue。
与此同时,您可以添加一个实现SmartLifecyle
的bean,将标志设置为false(在start()
方法中);它将在IntegrationManagementConfigurer
之后运行。
当然,您也可以将日志类别org.springframework.integration.amqp.channel.PollableAmqpChannel
设置为WARN
,以便更简单地实现相同的效果。