2016-04-07 12 views
1

Camel kullanıyorum ve birden çok Defaultproducer örneğinin aniden oluşturulduğu bir sorunum var. Normalde deve rotasına başladığımda, üreticinin yalnızca bir örneği beklendiği gibi oluşturulur. Fakat bir süre (saat) çalıştıktan sonra yeni bir Üretici başlatılır. Bu sorunun nasıl üstesinden geleceğime dair hiçbir fikrim yok. Üretici sınıfı doStart içinDeve'de Varsayılan Üreticinin Çoklu Örnekleri oluşturuldu

Kodu:

@Override 
protected void doStart() throws Exception { 
    super.doStart(); 
    connect(); 
} 

bağlantı ön yükleme ile kanala bağlamak için kullanılır(). Yeni bir üretici başlatıldığı için, bazen birden çok kez yolun çökmesine neden oluyor.

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."); 
      } 
     } 
    }); 
} 

Deve Rota:

// 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); 

nasıl bir yapımcı o int ha ilk yer durduruldu edilmeden örneği olabilir? Hizmetin durumunu bir yerde bilmek zorunda mıyım?

cevap

0

Biraz kafa karıştırıcı, neden bunları yapmak zorundasınız? Kullanım durumunun ne olduğunu ve deve rolünün ne olduğunu anlatabilir misin? ;)

+0

Bu, bir üretici tüketici uygulamasıdır. Rotaları tanımlamak için deve kullanıyorum. Şu anda tek bir son nokta güzergahı ayarlıyorum. Bitiş noktası, üreticiyi mesajları üretmeye ve göndermeye başlar. Son noktaya bir mesaj gönderildiğinde, bu son noktayı sağlıklı olarak işaretlerim. DoStart(), uç noktaya bağlanmaya çalışan yapımcıyı başlatır. Üreticinin doStart() öğesi birkaç saat çalıştıktan sonra tekrar aniden çağrılır. DoStart() yöntemindeki connect() nedeniyle, yeniden bağlanmaya yeniden bağlanmaya çalışır ve bu uç noktaya ileti veremiyorum. – Shiva

+0

Rotanızı gönderir misiniz? – gnanagurus

+0

Kodumu Camel Route'u içerecek şekilde düzenledim. – Shiva