2015-03-11 8 views
7

मैं हाइड्रिक्स, यूरेका और रिबन जैसे नेटफ्लिक्स एडॉन्स के साथ स्प्रिंग क्लाउड का उपयोग करके एक मूल प्रोजेक्ट बनाने की कोशिश कर रहा हूं ताकि यह सीख सके कि यह कैसे काम करता है। जिस परियोजना को मैं बनाने का प्रयास कर रहा हूं वह एक साधारण संदेश सर्वर है जो संदेश रखेगा। और एक संदेश-क्लाइंट जो सिर्फ सर्वर के लिए सर्वर से पूछेगा, और मैं इसके लिए ऑटो डिस्कवरी क्लाइंट, या RestTemplate खोज का उपयोग करना चाहता हूं। लेकिन मैं या तो काम नहीं कर सकता।मैं नेटफ्लिक्स यूरेका के साथ वसंत-क्लाउड का उपयोग करते समय डिस्कवरी क्लाइंट को कैसे काम कर सकता हूं?

मैं निम्नलिखित संरचना है:

  • संदेश-क्लाइंट (यूरेका ग्राहक)
  • संदेश-सर्वर (यूरेका ग्राहक)
  • विन्यास सेवा (config सर्वर)
  • खोज सेवा (यूरेका सर्वर)

क्या मैं वर्तमान में मैं विन्यास सेवा शुरू, और application.yml विवरणों को प्रकट है इन "क्षुधा/ग्राहकों" जब वे निम्नलिखित संरचना से कनेक्ट कर रहे हैं सभी के लिए:

  • config-सेवा \ src \ मुख्य \ संसाधन \ config \ appname.yml
  • एप्लिकेशन \ src \ मुख्य \ संसाधन \ bootstrap.yml (क्लाउड कॉन्फ़िगरेशन में एपनाम और यूआरएल शामिल है)

यह ठीक काम कर रहा है, और मेरे ऐप्स कॉन्फ़िगर सर्वर से प्राप्त पोर्ट पर शुरू होते हैं, साथ ही वे सभी मेरे यूरेका सर्वर से कनेक्ट होते हैं , और वे सभी वहां दिखाई दे रहे हैं। साथ ही साथ हाइस्ट्रिक्स फेलओवर भी काम कर रहा है, यह नहीं कि यह इससे संबंधित है लेकिन यह मुझे बताता है कि यह पूरी तरह से गलत नहीं हो सकता है।

लेकिन यहाँ मेरी भ्रम ... (@Service एनोटेट) मेरी सेवा वर्ग में @Autowired एनोटेशन का उपयोग करते समय अपने ग्राहक मॉड्यूल के अंदर, मैं एक discoveryClient वस्तु पाने के लिए आता है, लेकिन मैं किसी भी अन्य सेवाओं का उपयोग कर खोजने में असमर्थ हूं एक।

संदेश क्लाइंट - बूट वर्ग:

@EnableAutoConfiguration 
@EnableHystrix 
@EnableEurekaClient 
@ComponentScan("cloud.rest.resources, spring.cloud.client") 
public class ClientBoot { 
    public static void main(String[] args) { 
     SpringApplication.run(ClientBoot.class, args); 
    } 
} 

संदेश क्लाइंट - बाकी संसाधन:

@RestController 
public class MessageResource { 
    @Autowired 
    private MessageClient messageClient; 
    @RequestMapping(value = "/message/{client}", method = RequestMethod.GET) 
    public Message getMessage(@PathVariable String client) { 
     return messageClient.getMessage(client); 
    } 
} 

संदेश क्लाइंट - MessageClient:

@Service 
public class RestMessageClient implements MessageClient { 
    @Autowired 
    private DiscoveryClient discoveryClient; 
    @Autowired 
    private RestTemplate restTemplate; 
    @Override 
    public Message getMessage(String client) { 
     return restTemplate.getForObject(String.format("http://message-server/message/%s", client), Message.class); 
    } 
} 

मेरा संदेश सर्वर बूट वर्ग कर रहा है संदेशों में मेरे क्लाइंट के समान ही टिप्पणियां हैं।

और जैसा कि मैंने कहा, मेरी सेवा वर्ग कुछ भी खोजने में असमर्थ हैं .. कौन मुझे मेरे सभी सवालों का की ओर जाता है:

  1. क्या वास्तव में रिबन लोड संतुलन का उपयोग करने की आवश्यकता है?
  2. मैं नहीं सोचा था, लेकिन अब मैं सिर्फ उलझन में हूँ, मैं रिबन उपयोग करने के लिए "ऑटो खोज" का उपयोग करने में सक्षम होना है।
  3. मैं क्या समझ लिया है से, जब EnableEurekaClient का उपयोग कर मैं भी EnableDiscoveryClient उपयोग करने की आवश्यकता नहीं करना चाहिए?
  4. क्या मैं अपने कॉन्फ़िगरेशन सर्वर पर रनटाइम में क्लाइंट के लिए yml फ़ाइलों को बदल सकता हूं और केवल क्लाइंट को रीबूट करना होगा?
  5. कॉन्फ़िगरेशन-सर्वर द्वारा वास्तव में कितना कॉन्फ़िगरेशन साझा किया जाना है, क्योंकि वर्तमान में मेरे सभी क्लाइंट में केवल एक सुपर मूल बूटस्ट्रैप.आईएमएल फ़ाइल है।
  6. क्या किसी के पास एक अच्छा लिंक है जहां मैं अपनी yml फ़ाइलों में सेट की जा रही सभी संपत्तियों के बारे में अधिक पढ़ सकता हूं? वसंत बादल के साथ संयोजन में मैं उनका उपयोग कैसे कर सकता हूं इस पर एक दस्तावेज दोनों वास्तव में मौजूद गुणों के साथ-साथ कुछ दस्तावेज के दस्तावेज के बारे में भी दस्तावेज करता हूं?
  7. क्या मुझे अपने ऐप्स/क्लाइंट को अन्य ऐप्स/क्लाइंट खोजने में सक्षम करने के लिए विशिष्ट गुणों की आवश्यकता है?

संपादित जानकारी

अपने त्वरित और उत्कृष्ट उत्तर के लिए धन्यवाद, मैं इस अधिक से अधिक आज के माध्यम से चला है और मैं अंत में काम कर रहे .. समस्या अपने आवेदन मिल गया (मैं नहीं कर सकता समझें और क्यों उम्मीद कर रहे थे कि आप मुझे समझने में मदद कर सकते हैं) यह है कि मेरी खोज सेवा में मेरे प्रत्येक अन्य क्लाइंट के लिए वाईएमएल फाइलें हैं, जहां मैं पोर्ट और यूरेका की जानकारी जैसी चीजें निर्दिष्ट करता हूं .. मैंने जो भी निर्दिष्ट किया था वह भी था:

eureka: 
    client: 
     serviceUrl: 
      defaultZone: http://localhost:8761/eureka 

इसलिए, जब मैं इस मान को सेट करता हूं तो ऐसा लगता है कि मेरी सेवा खोज काम नहीं कर रही है .. यहां तक ​​कि मैं अपने सभी एप्लिकेशन यूरेका सर्वर में देख सकता हूं, जब भी यह मान सेट था तो वे एक दूसरे को खोजने में असमर्थ थे।

मैं अपने विन्यास सेवा में संदेश-server.yml फ़ाइल कि बूटस्ट्रैप के बाद मेरा संदेश-सर्वर अनुप्रयोग के लिए बाहर भेज दिया जाता ..

होने तो फिर मैं दो नए प्रश्न हैं द्वारा यह मान सेट।

  1. मैं इस यूरेका सर्वर संपत्ति को कैसे ओवरराइड कर सकता हूं?
  2. जब मैं यह मान निर्धारित करता हूं तो मेरा खोज क्लाइंट काम करना बंद क्यों करता है, यह वास्तव में क्या करता है?
+0

हम नहीं जानते कि आपकी समस्या 'डिस्कवरी क्लाइंट' के साथ क्या है। आपने अभी कहा है कि आप "कोई अन्य सेवाएं ढूंढने में असमर्थ" हैं। इसका क्या मतलब है? –

+1

ऐसा लगता है कि आपकी सेवा यूआरएल पीछे की ओर लापता है "/"? –

+0

धन्यवाद डेव, जिसने मेरी समस्याओं का समाधान किया! मुझे इस छोटी सी समस्या के साथ अब तक बहुत कोशिश कर रहा है .. – nesohc

उत्तर

11

वास्तव में रिबन लोड बैलेंसर का उपयोग करने के लिए क्या आवश्यक है?

रिबन-लोडबलेंसर क्लासपाथ पर होना चाहिए (उदाहरण के लिए "वसंत-क्लाउड-स्टार्टर-रिबन" के माध्यम से)। फिर आप LoadBalancerClient के रूप में इंजेक्ट कर सकते हैं या आप RestTemplate इंजेक्ट कर सकते हैं (यदि आपके पास LoadBalancerClient है तो यह लोड-बैलेंसर जागरूक होगा)।

क्या मुझे "ऑटो डिस्कवरी" का उपयोग करने में सक्षम होने के लिए रिबन का उपयोग करना है, मैंने सोचा नहीं लेकिन अब मैं उलझन में हूं।

"ऑटो डिस्कवरी" क्या है? DiscoveryClient (रिबन एक लोड बैलेंसर है, सेवा रजिस्ट्री नहीं है) का उपयोग करने के लिए आपको रिबन का उपयोग करने की आवश्यकता नहीं है।

मैं जो समझ गया हूं, उसे सक्षम करें, EnableEurekaClient I का उपयोग करते समय मुझे EnableDiscoveryClient का उपयोग करने की आवश्यकता नहीं है?

सही। @EnableEurekaClient@EnableDiscoveryClient के साथ एनोटेट किया गया है, इसलिए यह केवल वरीयता व्यक्त करने के लिए है।

क्या मैं रनटाइम में ग्राहकों के लिए अपने कॉन्फ़िगर-सर्वर पर yml फ़ाइलों को बदल सकता हूं और केवल क्लाइंट को रीबूट करना होगा?

हां। या आप एंडपॉइंट्स को रीफ्रेश या रीस्टार्ट/रीस्टार्ट कर सकते हैं (कम से कम समय-समय पर पूर्ण रीबूट उत्पादन में सबसे अच्छा है)।

कॉन्फ़िगरेशन-सर्वर द्वारा वास्तव में कितना कॉन्फ़िगरेशन साझा किया जाना है, क्योंकि वर्तमान में मेरे सभी क्लाइंट में एक सुपर मूल बूटस्ट्रैप.आईएमएल फ़ाइल है।

जितना चाहें उतना। तार का एक टुकड़ा कितना लंबा है? अगर मैं आप थे तो मैं केंद्रीय कॉन्फ़िगरेशन को न्यूनतम (केवल उन चीजों को जो वातावरण के बीच बदलता हूं, या रनटाइम पर) रखता हूं।

क्या किसी के पास एक अच्छा लिंक है जहां मैं अपनी yml फ़ाइलों में सेट की जा रही सभी संपत्तियों के बारे में अधिक पढ़ सकता हूं? वसंत बादल के साथ संयोजन में मैं उनका उपयोग कैसे कर सकता हूं इस पर एक दस्तावेज दोनों वास्तव में मौजूद गुणों के साथ-साथ कुछ दस्तावेज के दस्तावेज के बारे में भी दस्तावेज करता हूं?

वसंत बूट और वसंत बादल बाहरी गुणों के लिए मेटाडेटा स्वत: उत्पन्न कर चुके हैं। IDEs की नई पीढ़ी उन्हें समझता है, और वे http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties

के तहत उपयोगकर्ता पुस्तिका (स्प्रिंग बूट कम से कम के लिए) में सूचीबद्ध हैं मैं विशिष्ट गुणों की जरूरत है मेरी सक्षम करने के लिए करते हैं (ताकि एसटीएस 3.6.4 या आईडिया 14.1 प्राप्त) ऐप्स/क्लाइंट अन्य ऐप्स/क्लाइंट ढूंढने के लिए?

आपको अपनी सेवा रजिस्ट्री (इस मामले में यूरेका) का पता लगाने में सक्षम होना चाहिए। यदि आप यूरेका का उपयोग कर रहे हैं और आपके क्लाइंट पंजीकृत हैं तो यह पर्याप्त है।

+0

आपके त्वरित और उत्कृष्ट उत्तर के लिए धन्यवाद, मेरे बहुत से सवाल हाइंडसाइट में मूर्ख थे क्योंकि मुझे लगता है कि यह काम करने के लिए मेरे भ्रम की वजह से मैं नहीं हूं, मैं संदेह और दोबारा जांचना चाहता था, फिर से धन्यवाद! मैंने आज त्रुटि खोजने के बाद अपना मूल प्रश्न भी अपडेट किया है, क्योंकि मुझे समझ में नहीं आता कि यह किस तरह से व्यवहार कर रहा है और यदि आप मेरे संपादित हिस्से को पढ़ सकते हैं और इसका उत्तर देने का प्रयास भी करते हैं तो मैं बहुत सराहना करता हूं, धन्यवाद अग्रिम रूप से! – nesohc

संबंधित मुद्दे

 संबंधित मुद्दे