2012-11-16 30 views
10

मैं सक्रिय सामग्री से संदेश लेने के लिए ऊंट का उपयोग करना चाहता हूं और फिर, संदेश सामग्री (प्रोटोबफ) के आधार पर, ट्विटर पर एक या अधिक संदेश भेजना चाहता हूं। मैंने एक बीन लिखा है जिसे एक मार्ग के भीतर से बुलाया जाता है और जो "प्रत्यक्ष: xyz" एंडपॉइंट पर एकाधिक संदेश भेजने के लिए इंजेक्शन का उपयोग करता है।सीधा मार्ग पर अपाचे कैमल एंडपॉइंट इंजेक्शन "कोई उपभोक्ता एंडपॉइंट पर उपलब्ध नहीं है"

हालांकि, कैमल कार्यावधि में शिकायत कर रहा है कि:

2012-11-16 09:56:33,376 | WARN | ication.twitter] | DirectProducer     | 160 - org.apache.camel.camel-core - 2.10.2 | No consumers available on endpoint: Endpoint[direct://twitter] to process: Exchange[Message: hello world] 

अगर मैं बजाय सेम के भीतर से ट्विटर समाप्ति बिंदु को सीधे इंजेक्षन, यह ठीक काम करता है। हालांकि, परीक्षण को आसान बनाने के लिए, कॉन्फ़िगरेशन इत्यादि को सरल बनाने के लिए, मैं वास्तविक ट्विटर कॉन्फ़िगर को अलग रखना चाहता हूं, इसलिए एक अलग मार्ग पर भेजना चाहता हूं।

ऊंट संदर्भ config लगता है कि: -

सेम लगता है कि: -

public class NotificationTweeter { 

    @EndpointInject(uri = "direct:twitter") 
    private ProducerTemplate producerTemplate; 

    public void createTweets(NotificationMsg notification) { 

    String tweet = notification.getMessageDetail().getTitle(); 

    try { 
     // only send tweets where the notification message contains the Twitter mechanism 
     for (MechanismMsg mechanism : notification.getMechanismList()) { 
     if (mechanism.getType() == MechanismTypeEnum.TWITTER) { 

      // Cycle round the recipients 
      for (RecipientMsg recipient : mechanism.getRecipientList()) { 
      tweet = "@" + recipient.getIdentifier() + " " + tweet; 

      producerTemplate.sendBody(tweet); 
      } 

      // TODO exceptions if no recipients found, etc 
     } 
     } 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
    } 
} 

मैं (अन्य मार्गों में इस समस्या यह निश्चित रूप से ट्विटर सुविधा से संबंधित नहीं है लिया है) लेकिन अभी इसके आसपास काम किया है। इस बार, हालांकि, मैं वास्तव में समझना चाहता हूं कि समस्या क्या है! धन्यवाद, धन्यवाद।

उत्तर

5

यह आपके मार्गों के स्टार्टअप ऑर्डरिंग के साथ एक समस्या की तरह लगता है। अधिक जानकारी देखें http://camel.apache.org/configuring-route-startup-ordering-and-autostartup.html

आप दूसरे मार्ग से पहले शुरू करने के लिए "प्रत्यक्ष" मार्ग कॉन्फ़िगर कर सकते हैं, तो उस समस्या को हल किया जाना चाहिए।

+0

धन्यवाद। मैंने सीधा मार्ग पर स्टार्टअप ऑर्डर = "100" जोड़ा और "200" जो इसे भेजता है और यह पूरी तरह से काम करता है। –

+0

मैं मार्ग को कॉन्फ़िगर करने से पहले निर्माता टेम्पलेट सेट कर रहा था और ऊंट संदर्भ शुरू कर रहा था। आदेश मार्ग कॉन्फ़िगर किया गया है - ऊंट संदर्भ प्रारंभ - निर्माता टेम्पलेट कॉन्फ़िगरेशन –

7

आपके सेटअप के अनुसार, यह आपके द्वारा उठाए गए CamelContext पर भी निर्भर हो सकता है। मुझे एक ही त्रुटि संदेश मिला क्योंकि मैं वास्तव में उपयोग किए जा रहे किसी अन्य CamelContext में मौजूद एक मार्ग पर संदेश भेज रहा था।

(हालांकि पिछले जवाब पहले से ही स्वीकार कर लिया गया, यह है कि त्रुटि संदेश के लिए खोज अन्य लोगों के लिए काम कर समाधान हो सकता है।)

+0

मुझे एक ही समस्या थी। मैं @Component शीर्षलेख को रूटबिल्डर वर्ग में जोड़ना भूल गया, जिसका अर्थ है कि वसंत कक्षा का एक उदाहरण नहीं बना रहा था। – Phyxx

0

यहाँ आने दूसरों के लिए, इस त्रुटि भी एक के लिए एक OSGi त्रुटि की वजह से किया जा सकता है निर्भरता जो तैनात नहीं की गई है।

0

पार्टी के लिए थोड़ा देर हो चुकी है, लेकिन यह त्रुटि तब हुई जब मेरे पास दो अलग ब्लूप्रिंट फाइलें थीं, एक सामान्य चलने के लिए और एक परीक्षण के लिए। मेरे परीक्षण में मैं परीक्षण ब्लूप्रिंट का जिक्र कर रहा था लेकिन ध्यान दिया कि सामान्य एक स्वचालित रूप से भी शुरू हुआ था जिससे त्रुटियां हुईं।

प्रलेखन में http://camel.apache.org/blueprint-testing.html यह कहता है कि आप कुछ बंडलों को शुरू करने से अक्षम कर सकते हैं। इससे मुझे मेरे मामले में मदद मिली।