मैं हाइड्रिक्स, यूरेका और रिबन जैसे नेटफ्लिक्स एडॉन्स के साथ स्प्रिंग क्लाउड का उपयोग करके एक मूल प्रोजेक्ट बनाने की कोशिश कर रहा हूं ताकि यह सीख सके कि यह कैसे काम करता है। जिस परियोजना को मैं बनाने का प्रयास कर रहा हूं वह एक साधारण संदेश सर्वर है जो संदेश रखेगा। और एक संदेश-क्लाइंट जो सिर्फ सर्वर के लिए सर्वर से पूछेगा, और मैं इसके लिए ऑटो डिस्कवरी क्लाइंट, या 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);
}
}
मेरा संदेश सर्वर बूट वर्ग कर रहा है संदेशों में मेरे क्लाइंट के समान ही टिप्पणियां हैं।
और जैसा कि मैंने कहा, मेरी सेवा वर्ग कुछ भी खोजने में असमर्थ हैं .. कौन मुझे मेरे सभी सवालों का की ओर जाता है:
- क्या वास्तव में रिबन लोड संतुलन का उपयोग करने की आवश्यकता है?
- मैं नहीं सोचा था, लेकिन अब मैं सिर्फ उलझन में हूँ, मैं रिबन उपयोग करने के लिए "ऑटो खोज" का उपयोग करने में सक्षम होना है।
- मैं क्या समझ लिया है से, जब EnableEurekaClient का उपयोग कर मैं भी EnableDiscoveryClient उपयोग करने की आवश्यकता नहीं करना चाहिए?
- क्या मैं अपने कॉन्फ़िगरेशन सर्वर पर रनटाइम में क्लाइंट के लिए yml फ़ाइलों को बदल सकता हूं और केवल क्लाइंट को रीबूट करना होगा?
- कॉन्फ़िगरेशन-सर्वर द्वारा वास्तव में कितना कॉन्फ़िगरेशन साझा किया जाना है, क्योंकि वर्तमान में मेरे सभी क्लाइंट में केवल एक सुपर मूल बूटस्ट्रैप.आईएमएल फ़ाइल है।
- क्या किसी के पास एक अच्छा लिंक है जहां मैं अपनी yml फ़ाइलों में सेट की जा रही सभी संपत्तियों के बारे में अधिक पढ़ सकता हूं? वसंत बादल के साथ संयोजन में मैं उनका उपयोग कैसे कर सकता हूं इस पर एक दस्तावेज दोनों वास्तव में मौजूद गुणों के साथ-साथ कुछ दस्तावेज के दस्तावेज के बारे में भी दस्तावेज करता हूं?
- क्या मुझे अपने ऐप्स/क्लाइंट को अन्य ऐप्स/क्लाइंट खोजने में सक्षम करने के लिए विशिष्ट गुणों की आवश्यकता है?
संपादित जानकारी
अपने त्वरित और उत्कृष्ट उत्तर के लिए धन्यवाद, मैं इस अधिक से अधिक आज के माध्यम से चला है और मैं अंत में काम कर रहे .. समस्या अपने आवेदन मिल गया (मैं नहीं कर सकता समझें और क्यों उम्मीद कर रहे थे कि आप मुझे समझने में मदद कर सकते हैं) यह है कि मेरी खोज सेवा में मेरे प्रत्येक अन्य क्लाइंट के लिए वाईएमएल फाइलें हैं, जहां मैं पोर्ट और यूरेका की जानकारी जैसी चीजें निर्दिष्ट करता हूं .. मैंने जो भी निर्दिष्ट किया था वह भी था:
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka
इसलिए, जब मैं इस मान को सेट करता हूं तो ऐसा लगता है कि मेरी सेवा खोज काम नहीं कर रही है .. यहां तक कि मैं अपने सभी एप्लिकेशन यूरेका सर्वर में देख सकता हूं, जब भी यह मान सेट था तो वे एक दूसरे को खोजने में असमर्थ थे।
मैं अपने विन्यास सेवा में संदेश-server.yml फ़ाइल कि बूटस्ट्रैप के बाद मेरा संदेश-सर्वर अनुप्रयोग के लिए बाहर भेज दिया जाता ..
होने तो फिर मैं दो नए प्रश्न हैं द्वारा यह मान सेट।
- मैं इस यूरेका सर्वर संपत्ति को कैसे ओवरराइड कर सकता हूं?
- जब मैं यह मान निर्धारित करता हूं तो मेरा खोज क्लाइंट काम करना बंद क्यों करता है, यह वास्तव में क्या करता है?
हम नहीं जानते कि आपकी समस्या 'डिस्कवरी क्लाइंट' के साथ क्या है। आपने अभी कहा है कि आप "कोई अन्य सेवाएं ढूंढने में असमर्थ" हैं। इसका क्या मतलब है? –
ऐसा लगता है कि आपकी सेवा यूआरएल पीछे की ओर लापता है "/"? –
धन्यवाद डेव, जिसने मेरी समस्याओं का समाधान किया! मुझे इस छोटी सी समस्या के साथ अब तक बहुत कोशिश कर रहा है .. – nesohc