Apache camel 计时器监视器从驼峰路由生成大量消息

Apache camel 计时器监视器从驼峰路由生成大量消息,apache-camel,Apache Camel,我有两个骆驼路线发送固定消息(心跳)使用定时器:监视器。这将依次从生产者处理器发送到两个端点。当消费者未使用该消息时,同一消息将从生产者处失效3次。成功消费后,计时器应发送下一条消息。但对我来说,当消息在生产者中重试时,它会发送计时器监视器中挂起的所有消息 我在我的路径生成器中使用了计时器监视器路径,如下所示 for (final EndpointInfo endpointInfo : endpointInfos) { final String uri = SIA_END

我有两个骆驼路线发送固定消息(心跳)使用定时器:监视器。这将依次从生产者处理器发送到两个端点。当消费者未使用该消息时,同一消息将从生产者处失效3次。成功消费后,计时器应发送下一条消息。但对我来说,当消息在生产者中重试时,它会发送计时器监视器中挂起的所有消息

我在我的路径生成器中使用了计时器监视器路径,如下所示

for (final EndpointInfo endpointInfo : endpointInfos) {
            final String uri = SIA_ENDPOINT_PREFIX + endpointInfo.getUri();
            from("timer:monitor" + uri + "?fixedRate=true&period=" + (heartbeatInterval * 1000))
                    .routeId(endpointInfo.getHeartbeatRouteId())
                    .autoStartup(false)
                    .process(new SetTimeStamp(nullMessageBuilder))
                    .setBody(constant(nullMessageBuilder))
                    .doTry()
                        .process(new EndpointInfoProcessor(endpointInfo))
                        .to(uri)
                        .process(new HealthProcessor(endpointInfo, true))
                    .doCatch(Throwable.class)
                        .process(new HealthProcessor(endpointInfo, false))
                        .end();

            uris[index++] = uri;
            routeIds[index] = endpointInfo.getHeartbeatRouteId();
        }

如何丢弃新的大量消息/停止计时器一次发送所有消息?

设置
fixedRate=false
。您可以在JDK关于计时器的文档中阅读更多关于固定费率的内容:

谢谢,它可以工作!!但我仍然有一个问题。当重试消息被传递到端点时,来自计时器的下一条消息也被传递。是否有一种方法可以在route builder中回调消息传递的结果。这样我就可以限制路由中的消息。