2016-02-15 27 views
7

के बिना यूरेका सेवा की खोज मैंने एक वसंत बूट माइक्रो सेवा और एक आरईएसटी क्लाइंट लिखा है। ग्राहक दूसरे मॉड्यूल का हिस्सा है और माइक्रो-सर्विस को रीस्टफुल कॉल करता है। यूरेका रजिस्ट्री के साथ माइक्रो-सर्विस रजिस्ट्रार और मैं यूरेका का उपयोग करने और सेवा के अंतराल प्राप्त करने के लिए मेरा क्लाइंट (जो एक वसंत बूट प्रोजेक्ट नहीं है) चाहता हूं। के बाद से ग्राहक एक वसंत-बूट अनुप्रयोगों मैं @SpringBootApplication, @EnableDiscoveryClient और DiscoveryClient तरह व्याख्या का उपयोग नहीं कर सकते हैं नहीं ऑटो आवेदन करने के लिए तार नहीं हैस्प्रिंग-बूट

मेरे समस्या है। क्या एनोटेशन का उपयोग किये बिना ग्राहक को DiscoveryClient बीन मैन्युअल रूप से ऑटो-वायर करने के लिए है?

+0

चेक '@ EnableDiscoveryClient' एनोटेशन में यूरेका-उदाहरण में उपलब्ध है विन्यास है कि आयात और नकल है कि अपनी खुद की परियोजना में पाते हैं। –

उत्तर

12

ठीक है, मैंने यह देखा है कि मैंने यह कैसे किया। असल में यह अनुमान लगाया गया है कि यह बहुत आसान है। निम्नलिखित से Netflix eureka project.

DiscoveryManager.getInstance().initComponent(new MyDataCenterInstanceConfig(), new DefaultEurekaClientConfig()); 

    String vipAddress = "MY-SERVICE"; 

    InstanceInfo nextServerInfo = null; 
    try { 
     nextServerInfo = DiscoveryManager.getInstance() 
       .getEurekaClient() 
       .getNextServerFromEureka(vipAddress, false); 
    } catch (Exception e) { 
     System.err.println("Cannot get an instance of example service to talk to from eureka"); 
     System.exit(-1); 
    } 

    System.out.println("Found an instance of example service to talk to from eureka: " 
      + nextServerInfo.getVIPAddress() + ":" + nextServerInfo.getPort()); 

    System.out.println("healthCheckUrl: " + nextServerInfo.getHealthCheckUrl()); 
    System.out.println("override: " + nextServerInfo.getOverriddenStatus()); 

    System.out.println("Server Host Name "+ nextServerInfo.getHostName() + " at port " + nextServerInfo.getPort()); 

प्रतिलिपि बनाई गई थी इसके अलावा, आप वर्ग पथ के लिए एक विन्यास फाइल को जोड़ने के लिए है। यूरेका क्लाइंट यूरेका सर्वर के बारे में जानकारी पढ़ने के लिए इस फाइल का उपयोग करता है।

eureka.preferSameZone=true 
eureka.shouldUseDns=false 
eureka.serviceUrl.default=http://localhost:8761/eureka/ 
eureka.decoderName=JacksonJson 

इसके अलावा आपको यूरेका क्लाइंट को निर्भरता के रूप में प्रदान करना होगा। यूरेका 1 जेडीके 7 का समर्थन करता है हालांकि इसका कुछ हिस्सा जेडीके 8 के साथ बनाया गया है। हालांकि मुझे जेडीके 7 के साथ चलाने के लिए "आर्काइउस-कोर" और "सर्वो-कोर" के पुराने संस्करण प्रदान करना पड़ा।

<dependency> 
     <groupId>com.netflix.archaius</groupId> 
     <artifactId>archaius-core</artifactId> 
     <version>0.7.3</version> 
    </dependency> 
    <dependency> 
     <groupId>com.netflix.servo</groupId> 
     <artifactId>servo-core</artifactId> 
     <version>0.10.0</version> 
    </dependency> 

यूरेका 2 पूरी तरह से जेडीके 7 का समर्थन करता है।

2

या तो आप बिना वसंत-बादल Netflix-यूरेका-क्लाइंट का उपयोग करते हैं और अपने आप से सभी कॉन्फ़िगर करने के लिए (जो डुप्लिकेट EurekaDiscoveryClientConfiguration का मतलब है)

है या आप एक साइडकार सेवा चला सकते हैं। साइडकार में एक ज़ुउल-प्रॉक्सी शामिल है जो यूरेका द्वारा खोजी जाने वाली सेवाओं को प्रॉक्सी करेगा। Spring Cloud Docs - Polyglot support with Sidecar

0

विश विरासत वसंत (गैर बूट) से यूरेका तक पहुँचने भी @EnableEureka और @EnableFeignClient

की तरह सरल बना है यह निकटतम मैं यह काम कर रहा हो सकता है। यह उदाहरण, Git हब

public class EurekaConfiguration { 

    private static ApplicationInfoManager applicationInfoManager; 
    private static EurekaClient eurekaClient; 

    private static synchronized ApplicationInfoManager initializeApplicationInfoManager(
      EurekaInstanceConfig instanceConfig) { 
     if (applicationInfoManager == null) { 
      InstanceInfo instanceInfo = new EurekaConfigBasedInstanceInfoProvider(instanceConfig).get(); 
      applicationInfoManager = new ApplicationInfoManager(instanceConfig, instanceInfo); 
     } 

     return applicationInfoManager; 
    } 

    private static synchronized EurekaClient initializeEurekaClient(ApplicationInfoManager applicationInfoManager, 
      EurekaClientConfig clientConfig) { 
     if (eurekaClient == null) { 
      eurekaClient = new DiscoveryClient(applicationInfoManager, clientConfig); 
     } 

     return eurekaClient; 
    } 

    public static EurekaClient getEurekaClient() 
    { 
     ApplicationInfoManager applicationInfoManager = initializeApplicationInfoManager(new MyDataCenterInstanceConfig()); 
     EurekaClient client = initializeEurekaClient(applicationInfoManager, new DefaultEurekaClientConfig()); 
     return eurekaClient; 
    } 
} 

मेरे क्लाइंट

String vipAddress = "NLPService"; 

     InstanceInfo nextServerInfo = null; 
     try { 
      nextServerInfo = EurekaConfiguration.getEurekaClient().getNextServerFromEureka(vipAddress, false); 
     } catch (Exception e) { 
      System.err.println("Cannot get an instance of example service to talk to from eureka"); 
      System.exit(-1); 
     } 

     System.out.println("Found an instance of example service to talk to from eureka: " 
       + nextServerInfo.getVIPAddress() + ":" + nextServerInfo.getPort()); 

     String serviceBaseURL = "http://"+ nextServerInfo.getHostName() 
     +":"+nextServerInfo.getPort(); 


     String nlpServiceURL = serviceBaseURL +"/nlp"; 

     RestTemplate restTemplate = new RestTemplate(); 

     NLPInputToBeTransformed input = new NLPInputToBeTransformed(); 
     input.setInputText(" Test Input "); 


     NLPResponse nlpResponse = restTemplate.postForObject 
       (nlpServiceURL, input, NLPResponse.class, new HashMap<>()); 

     System.out.println(" Service Response " + nlpResponse.getTags()); 
संबंधित मुद्दे