Spring integration 使用imap空闲通道适配器时如何处理连接/身份验证错误
通过使用轮询器上的错误通道,我能够处理和报告imap和pop适配器的连接/身份验证相关错误 我也有一个imap idle,但它没有在该通道上获得这些错误,只是在日志中有一个警告Spring integration 使用imap空闲通道适配器时如何处理连接/身份验证错误,spring-integration,Spring Integration,通过使用轮询器上的错误通道,我能够处理和报告imap和pop适配器的连接/身份验证相关错误 我也有一个imap idle,但它没有在该通道上获得这些错误,只是在日志中有一个警告 对于电子邮件空闲适配器,处理和报告类似错误的方法是什么?我猜您的意思是代码的和平: catch (Exception e) { //run again after a delay logger.warn("Failed to execute IDLE task. Will attempt to resub
对于电子邮件空闲适配器,处理和报告类似错误的方法是什么?我猜您的意思是代码的和平:
catch (Exception e) { //run again after a delay
logger.warn("Failed to execute IDLE task. Will attempt to resubmit in " + ImapIdleChannelAdapter.this.reconnectDelay + " milliseconds.", e);
ImapIdleChannelAdapter.this.receivingTaskTrigger.delayNextExecution();
ImapIdleChannelAdapter.this.publishException(e);
}
您可以在日志中看到WARN
请注意关于publishException()
的最新一行。这是一个代码:
private void publishException(Exception e) {
if (this.applicationEventPublisher != null) {
this.applicationEventPublisher.publishEvent(new ImapIdleExceptionEvent(e));
}
因此,您需要为该
ImapIdleExceptionEvent
添加一个EventListener
。例如,您可以使用。我猜您的意思是代码的和平:
catch (Exception e) { //run again after a delay
logger.warn("Failed to execute IDLE task. Will attempt to resubmit in " + ImapIdleChannelAdapter.this.reconnectDelay + " milliseconds.", e);
ImapIdleChannelAdapter.this.receivingTaskTrigger.delayNextExecution();
ImapIdleChannelAdapter.this.publishException(e);
}
您可以在日志中看到WARN
请注意关于publishException()
的最新一行。这是一个代码:
private void publishException(Exception e) {
if (this.applicationEventPublisher != null) {
this.applicationEventPublisher.publishEvent(new ImapIdleExceptionEvent(e));
}
因此,您需要为该
ImapIdleExceptionEvent
添加一个EventListener
。例如,您可以使用。谢谢,我会尝试一下。如何添加自定义头,如“adapter.id”我在imap&pop中有一个,我通过错误通道的头enricher传递适配器id,以了解哪个适配器有问题,因为系统可以有多个imap和/或pop适配器,并且我使用父/子上下文来控制它们。事件执行此操作super(ImapIdleChannelAdapter.this,e);
。因此,在侦听器端,您可以跟踪getComponentName()
,以区分逻辑谢谢,我还没有尝试过,但是如果有两个imap空闲适配器实例,其中一个失败了,我会知道是哪一个,这样我就可以在该实例上调用stop,然后删除相关的子ConfigurableApplicationContext(ClassPathXmlApplicationContext)它被附加到父spring上下文。谢谢,虽然我需要做一些其他更改来存储上下文id,但它仍然有效要区分两个imap空闲适配器,正如我可以在ImapIdleChannelAdpater返回的applicationcontextid上回答的那样。谢谢,我将尝试一下。如何添加自定义标头,如“adapter.id”我在imap&pop中有一个,我通过标头enricher为错误通道传递适配器id,以了解哪个适配器作为系统ca出现问题n有多个imap和/或pop适配器,我使用父/子上下文来控制它们。事件执行此操作super(ImapIdleChannelAdapter.this,e);
。因此,在侦听器端,您可以跟踪getComponentName()
以区分逻辑。on(namedcomponent)event.getSource()谢谢,我还没有尝试过,但是如果有两个imap空闲适配器实例,其中一个失败了,我会知道是哪一个,这样我就可以在该实例上调用stop,然后删除相关的子ConfigurableApplicationContext(ClassPathXmlApplicationContext)它连接到父spring上下文。谢谢,虽然我需要做一些其他更改来存储上下文id,以区分两个imap空闲适配器,因为我可以在ImapIdleChannelAdpater返回的applicationcontextid上进行回复,但它仍然有效。