Apache camel 在Camel中创建了默认生产者的多个实例

Apache camel 在Camel中创建了默认生产者的多个实例,apache-camel,producer-consumer,Apache Camel,Producer Consumer,我使用的是Camel,我遇到了一个问题,Defaultproducer的多个实例被突然创建。通常,当我启动驼峰路线时,只会按预期创建一个生产者实例。但在运行一段时间(小时)后,将实例化一个新的生产者。我不知道如何回避这个问题 生产商级doStart的代码: @Override protected void doStart() throws Exception { super.doStart(); connect(); } connect()用于使用引导连接到通道。由于实例化了一

我使用的是Camel,我遇到了一个问题,Defaultproducer的多个实例被突然创建。通常,当我启动驼峰路线时,只会按预期创建一个生产者实例。但在运行一段时间(小时)后,将实例化一个新的生产者。我不知道如何回避这个问题

生产商级doStart的代码:

@Override
protected void doStart() throws Exception {
    super.doStart();
    connect();
}
connect()用于使用引导连接到通道。由于实例化了一个新的生产者,它会多次尝试连接,有时会导致路由崩溃

private void connect() {
    final ChannelFuture channelFuture = bootstrap.connect();
    channelFuture.addListener(new GenericFutureListener<ChannelFuture>() {
        @Override
        public void operationComplete(final ChannelFuture future) throws Exception {
            if (!future.isSuccess()) {
                LOG.info("Connection not successful. Cause: " + future.cause().toString() + " -> Reconnecting...");
                reconnect(future.channel());
            } else {
                LOG.info("Connection successful.");
            }
        }
    });
}

一个生产者如何在不首先停止的情况下被实例化?我需要知道某个地方的服务状态吗?

有点让人困惑,你为什么要这么做?你能说出你的用例是什么,骆驼扮演什么角色吗?;)

有点困惑,你为什么要这么做?你能说出你的用例是什么,骆驼扮演什么角色吗?;)

这是一个生产者-消费者应用程序。我使用骆驼来定义路线。目前,我正在设置单端点路由。端点启动生产者生成并发送消息。当消息传递到端点时,我将该端点标记为健康。doStart()启动尝试连接到端点的生产者。producer的doStart()在运行几个小时后突然再次被调用。由于doStart()方法中的connect(),它尝试再次连接,导致连接冗余,我无法将消息传递到此终结点。您可以发布您的路由吗?@U2One您能帮我吗?这是一个生产者-消费者应用程序。我使用骆驼来定义路线。目前,我正在设置单端点路由。端点启动生产者生成并发送消息。当消息传递到端点时,我将该端点标记为健康。doStart()启动尝试连接到端点的生产者。producer的doStart()在运行几个小时后突然再次被调用。由于doStart()方法中的connect(),它再次尝试连接,导致连接冗余,我无法将消息传递到此终结点。您可以发布您的路由吗?@U2One您能帮我吗?
// Define heartbeat routes
    for (final EndpointInfo endpointInfo : endpointInfos) {
        final String uri = BOLD_ENDPOINT_PREFIX + endpointInfo.getUri();
        from("timer:monitor" + uri + "?fixedRate=true&period=" + (heartbeatInterval * 1000))
                .routeId(endpointInfo.getHeartbeatRouteId())
                .autoStartup(false)
                .setBody(constant(HEARTBEAT_MSG))
                .doTry()
                  .to(uri)
                  .process(new HealthProcessor(endpointInfo, true))
                .doCatch(Throwable.class)
                  .process(new HealthProcessor(endpointInfo, false))
                .end();

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

    // Define event route
    from("activemq:Queue.External?cacheLevelName=CACHE_CONSUMER&transacted=true")
            .routeId("eventProcessing")
            .autoStartup(false)
            .log(LoggingLevel.DEBUG, "Event Received: ${id}")
            .filter(new ConfigEventFilter())
            .filter(videoVerificationEventDisabled)
            .filter(virtualAssistantEventDisabled)
            .filter(eventBatchingDisabled)
            .filter(liveInterventionEventDisabled)
            .process(factory.createProducerTransformer())
            .loadBalance(new BoldLoadBalancer(endpointInfos))
            .to(uris);

    // Set up heartbeat detector
    heartbeatDetector.initialize(this, routeIds);