2010-01-14 37 views
6

Gömülü Camel yönlendirmesinde uzak JMS kuyruğuna dayanıklı bir tüketicim var. Master-slave yapılandırmasıyla bu tür bir yönlendirmeye sahip olmak mümkün mü? Şimdi de, Devele ActiveMQ başlatıldığında ve gerçek yük devretme gerçekleştiğinde değilken deve rotalarının başlatıldığı ve etkinleştiği görülüyor.Köle ActiveMQ'de yalnızca slave failover'da aktif hale geldiğinde Camel rotaları nasıl başlatılır?

Şimdi de usta gönderilen aynı iletileri almak için köle örneğini neden olur ve bu başarısızlık sıraya gelmesi yinelenen iletileri neden olur.

ActiveMQ 5.3 ile birlikte Apache Camel 2.1 kullanıyorum.

cevap

1

o maalesef (ileti deposu dosya kilidi usta tarafından serbest bırakılır) usta

3

olana kadar köle üzerinde Deve bağlam/yolları başlamaz çünkü bu bir sorun olmamalı, ne zaman köle komisyoncu başlar ve bu yollarla birlikte CamelContext yapar. Eğer yaparak gerçekleştirebilirsiniz Ancak şu:

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring" autoStartup="false"> 

... 

</camelContext> 

Sonra uygulayan bir sınıf oluşturmak gerekir: köle komisyoncusuyla konuşlandırılmış camelContext On

başlatılmasını yolları önlemek için aşağıdaki AutoStartUp öznitelik eklemek ActiveMQ Servis Arabirimi. Köle komisyoncu olarak devraldı kez, Şimdi

<services> 
     <bean xmlns="http://www.springframework.org/schema/beans" class="com.fusesource.example.CamelContextService"> 
      <property name="camel" ref="camel"/> 
     </bean> 
</services> 

:

package com.fusesource.example; 

import org.apache.activemq.Service; 
import org.apache.camel.spring.SpringCamelContext; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

/** 
* Example used to start and stop the camel context using the ActiveMQ Service interface 
* 
*/ 
public class CamelContextService implements Service 
{ 
private final Logger LOG = LoggerFactory.getLogger(CamelContextService.class); 
SpringCamelContext camel; 

@Override 
public void start() throws Exception { 
    try { 
     camel.start(); 
    } catch (Exception e) { 
     LOG.error("Unable to start camel context: " + camel); 
     e.printStackTrace(); 
    } 
} 

@Override 
public void stop() throws Exception { 
    try { 
     camel.stop(); 
    } catch (Exception e) { 
     LOG.error("Unable to stop camel context: " + camel); 
     e.printStackTrace(); 
    } 
} 

public SpringCamelContext getCamel() { 
    return camel; 
} 

public void setCamel(SpringCamelContext camel) { 
    this.camel = camel; 
} 
} 

Sonra brokerın yapılandırma dosyasında, activemq.xml, hizmet kaydetmek için aşağıdaki ekleyin: şöyle Bunun bir örneği olacaktır Master, başlangıç ​​metodu servis sınıfında çağrılacak ve güzergahlar başlayacaktır.

ben de burada bu konuda bir blog gönderdiniz: Kendi koşullara göre bazı yollar/askıya sürdürmek için karar verebilir deve routepolicies ile http://jason-sherman.blogspot.com/2012/04/activemq-how-to-startstop-camel-routes.html