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?
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
Rotanızı gönderir misiniz? – gnanagurus
Kodumu Camel Route'u içerecek şekilde düzenledim. – Shiva