我可以让轮询器在 start() 命令后使用 WAIT 开始他的循环吗?

Can I make a Poller start his cycle with WAIT after start() command?

在我的集成流程中,我在某些错误情况下从标准流程更改为错误流程,通过将 start/stop 命令消息发送到 standardStateEntryPoint 并启动 errorStateEntryPoint Control Channel.

errorStateEntryPoint是这样的:

@Bean
public IntegrationFlow errorStateEntryPoint() {
    return IntegrationFlows.from(
            () -> new GenericMessage<String>(""),
                    e -> e.poller(p -> p.fixedDelay(ERROR_STATE_POLLING))
                    .id("errorStateSourcePollingChannelAdapter")
                    .autoStartup(false))
            .channel("httpOutRequest")
            .get();
}

它有一个 Poller 固定延迟 5_000 毫秒。启动时识别的生命周期是

send -> wait -> send -> wait etc.

是否有可能从延迟开始逆生命周期?

wait -> send -> wait -> send etc.

我发现了什么:

您可以设置轮询器的initialDelay。如果您的轮询器有 5.000 毫秒的周期而没有初始延迟,则它以这种方式工作:

send -> wait -> send -> wait  etc.

如果您将初始延迟设置为 5.000 毫秒,它会完全按要求工作:

wait -> send -> wait -> send etc.

初始延迟是第二个参数设置p.fixedDelay(...)。那么 errorStateEntryPoint 轮询通道适配器应该是这样的:

@Bean
public IntegrationFlow errorStateEntryPoint() {
    return IntegrationFlows.from(
            () -> new GenericMessage<String>(""),
                    e -> e.poller(p -> p.fixedDelay(ERROR_STATE_POLLING, ERROR_STATE_POLLING))
                    .id("errorStateSourcePollingChannelAdapter")
                    .autoStartup(false))
            .channel("httpOutRequest")
            .get();
}

就是这样。