2010-01-14 20 views
6

मेरे पास एम्बेडेड कैमल रूटिंग में रिमोट जेएमएस कतार में एक टिकाऊ उपभोक्ता है। क्या मास्टर-गुलाम कॉन्फ़िगरेशन के साथ इस प्रकार का रूटिंग होना संभव है? अब ऐसा लगता है कि ऊंट मार्ग शुरू हो गए हैं और पहले ही सक्रिय हो गए हैं जब गुलाम ActiveMQ प्रारंभ होता है और जब वास्तविक विफलता होती है।दास ActiveMQ पर ऊंट मार्ग कैसे शुरू करें जब गुलाम विफलता में सक्रिय हो जाए?

अब यह गुलाम उदाहरण को उसी संदेश प्राप्त करने का कारण बनता है जो मास्टर को भी भेजा जाता है और इससे डुप्लीकेट संदेश विफलता पर कतार तक पहुंचने का कारण बनता है।

मैं अपाचे कैमल 2.1 के साथ ActiveMQ 5.3 का उपयोग कर रहा हूं।

उत्तर

1

यह कोई मुद्दा है क्योंकि ऊंट संदर्भ/दास पर मार्गों शुरू नहीं होगी जब तक यह दुर्भाग्य मास्टर (जब संदेश संग्रह फ़ाइल ताला मास्टर द्वारा जारी की है)

3

हो जाता है नहीं होना चाहिए, जब गुलाम दलाल शुरू होता है तो मार्गों के साथ CamelContext भी करता है। तुम क्या कर ऐसा कर सकते हैं हालांकि निम्नलिखित:

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

... 

</camelContext> 

इसके बाद आप एक वर्ग को लागू करने वाली बनाने की जरूरत:

camelContext गुलाम दलाल के साथ तैनात किया पर निम्नलिखित autostartup विशेषता प्रारंभ होने से मार्गों को रोकने के लिए जोड़ने ActiveMQ सेवा इंटरफ़ेस।

<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; 
} 
} 

तो दलाल का विन्यास फाइल में, activemq.xml, सेवा रजिस्टर करने के लिए निम्नलिखित जोड़ें: इस का एक नमूना इस प्रकार होगा मास्टर, स्टार्ट विधि सर्विस क्लास पर लागू की जाएगी और मार्ग शुरू हो जाएंगे।

मैं भी इस बारे में यहाँ एक ब्लॉग पोस्ट किया है: http://jason-sherman.blogspot.com/2012/04/activemq-how-to-startstop-camel-routes.html

0

ऊंट routepolicies आप अपने खुद के शर्तों के आधार पर निलंबित करने के लिए/कुछ मार्गों को फिर से शुरू तय कर सकते हैं। http://camel.apache.org/routepolicy.html

एक मौजूदा जुकीपर रूट पॉलीसी है जिसका उपयोग नेता चुनाव करने के लिए किया जा सकता है। http://camel.apache.org/zookeeper.html (पृष्ठ के नीचे देखें)