定时器监视器从驼峰路由生成大量消息

时间:2016-02-22 11:56:24

标签: apache-camel

我有两个使用timer:monitor发送固定消息(心跳)的骆驼路由。然后,这将从Producer处理器发送到两个端点。当消费者没有消费该消息时,相同的消息将从生产者退休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();
        }

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

1 个答案:

答案 0 :(得分:0)

设置fixedRate=false。您可以在JDK文档中阅读有关计时器的更多内容:https://docs.oracle.com/javase/7/docs/api/java/util/Timer.html#scheduleAtFixedRate(java.util.TimerTask,%20java.util.Date,%20long)