2015-05-08 14 views
5

के साथ वेब सेवा पंजीकृत करना मैं यूरेका (नेटफ्लिक्स) सेवा का उपयोग करके सेवा खोज का पता लगाने की कोशिश कर रहा था। मैंने नीचे दिखाए गए विकी लिंक में उल्लिखित चरणों का पालन किया है:यूरेका

https://github.com/Netflix/eureka 

यूरेका सेवा ऊपर और चल रही है।

अगला मैंने एक्सएमएल स्कीमा पढ़ने और सामग्री प्रकार जेएसओएन के रूप में भेजने के बाद, twiki में वर्णित POST विधि के साथ एक सेवा पंजीकृत करने के लिए पोस्टमैन क्लाइंट का उपयोग करने का प्रयास किया।

एक्सएमएल

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xsd:element name="instance"> 
     <xsd:complexType> 
      <xsd:all> 
       <!-- hostName in ec2 should be the public dns name, within ec2 public dns name will 
        always resolve to its private IP --> 
       <xsd:element name="hostName" type="xsd:string" /> 
       <!-- app name 
        Instructions for adding a new app name - <a _jive_internal="true" href="/clearspace/docs/DOC-20965" target="_blank">http://wiki.netflix.com/clearspace/docs/DOC-20965</a> --> 
       <xsd:element name="app" type="xsd:string" /> 
       <xsd:element name="ipAddr" type="xsd:string" /> 
       <xsd:element name="vipAddress" type="xsd:string" /> 
       <xsd:element name="secureVipAddress" type="xsd:string" /> 
       <xsd:element name="status" type="statusType" /> 
       <xsd:element name="port" type="xsd:positiveInteger" minOccurs="0" /> 
       <xsd:element name="securePort" type="xsd:positiveInteger" /> 
       <xsd:element name="homePageUrl" type="xsd:string" /> 
       <xsd:element name="statusPageUrl" type="xsd:string" /> 
       <xsd:element name="healthCheckUrl" type="xsd:string" /> 
       <xsd:element ref="dataCenterInfo" minOccurs="1" maxOccurs="1" /> 
       <!-- optional --> 
       <xsd:element ref="leaseInfo" minOccurs="0"/> 
       <!-- optional app specific metadata --> 
       <xsd:element name="metadata" type="appMetadataType" minOccurs="0" /> 
      </xsd:all> 
     </xsd:complexType> 
    </xsd:element> 

    <xsd:element name="dataCenterInfo"> 
     <xsd:complexType> 
      <xsd:all> 
       <xsd:element name="name" type="dcNameType" /> 
       <!-- metadata is only required if name is Amazon --> 
       <xsd:element name="metadata" type="amazonMetdataType" minOccurs="0"/> 
      </xsd:all> 
     </xsd:complexType> 
    </xsd:element> 

    <xsd:element name="leaseInfo"> 
     <xsd:complexType> 
      <xsd:all> 
       <!-- (optional) if you want to change the length of lease - default if 90 secs --> 
       <xsd:element name="evictionDurationInSecs" minOccurs="0" type="xsd:positiveInteger"/> 
      </xsd:all> 
     </xsd:complexType> 
    </xsd:element> 

    <xsd:simpleType name="dcNameType"> 
     <!-- Restricting the values to a set of value using 'enumeration' --> 
     <xsd:restriction base = "xsd:string"> 
      <xsd:enumeration value = "MyOwn"/> 
      <xsd:enumeration value = "Amazon"/> 
     </xsd:restriction> 
    </xsd:simpleType> 

    <xsd:simpleType name="statusType"> 
     <!-- Restricting the values to a set of value using 'enumeration' --> 
     <xsd:restriction base = "xsd:string"> 
      <xsd:enumeration value = "UP"/> 
      <xsd:enumeration value = "DOWN"/> 
      <xsd:enumeration value = "STARTING"/> 
      <xsd:enumeration value = "OUT_OF_SERVICE"/> 
      <xsd:enumeration value = "UNKNOWN"/> 
     </xsd:restriction> 
    </xsd:simpleType> 

    <xsd:complexType name="amazonMetdataType"> 
     <!-- From <a class="jive-link-external-small" href="http://docs.amazonwebservices.com/AWSEC2/latest/DeveloperGuide/index.html?AESDG-chapter-instancedata.html" target="_blank">http://docs.amazonwebservices.com/AWSEC2/latest/DeveloperGuide/index.html?AESDG-chapter-instancedata.html</a> --> 
     <xsd:all> 
      <xsd:element name="ami-launch-index" type="xsd:string" /> 
      <xsd:element name="local-hostname" type="xsd:string" /> 
      <xsd:element name="availability-zone" type="xsd:string" /> 
      <xsd:element name="instance-id" type="xsd:string" /> 
      <xsd:element name="public-ipv4" type="xsd:string" /> 
      <xsd:element name="public-hostname" type="xsd:string" /> 
      <xsd:element name="ami-manifest-path" type="xsd:string" /> 
      <xsd:element name="local-ipv4" type="xsd:string" /> 
      <xsd:element name="hostname" type="xsd:string"/>  
      <xsd:element name="ami-id" type="xsd:string" /> 
      <xsd:element name="instance-type" type="xsd:string" /> 
     </xsd:all> 
    </xsd:complexType> 

    <xsd:complexType name="appMetadataType"> 
     <xsd:sequence> 
      <!-- this is optional application specific name, value metadata --> 
      <xsd:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/> 
     </xsd:sequence> 
    </xsd:complexType> 

</xsd:schema> 

इस तरह रजिस्टर अनुरोध देखो के मापदंडों:

यूआरएल: http://tpdeva13:8080/eureka/v2/apps/service1 सामग्री प्रकार: आवेदन/json

json के रूप में भेजा मानकों हैं:

{ 
    "hostName":"tpdeva13", 
    "app":"service1", 
    "ipAddr":"tpdeva13", 
    "vipAddress":"tpdeva13", 
    "secureVipAddress":"tpdeva13", 
    "status":"STARTING", 
    "port":"11111" 

    } 

मुझे यकीन नहीं है कि जेसन कि मैं एक्सएमएल स्कीमा के साथ संरेखित कर रहा हूं?

जब मैं बिल्ला सर्वर जो यूरेका होस्ट करता है करने के लिए पोस्ट अनुरोध भेजने, मैं निम्नलिखित त्रुटि मिलती है:

com.thoughtworks.xstream.mapper.CannotResolveClassException: hostName 
com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:56) 
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:55) 
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88) 
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:79) 
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:74) 
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:45) 
com.thoughtworks.xstream.core.util.HierarchicalStreams.readClassType(HierarchicalStreams.java:29) 
com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:133) 
com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32) 
com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1052) 
com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1036) 
com.thoughtworks.xstream.XStream.fromXML(XStream.java:921) 
com.netflix.discovery.converters.EntityBodyConverter.read(EntityBodyConverter.java:57) 
com.netflix.discovery.provider.DiscoveryJerseyProvider.readFrom(DiscoveryJerseyProvider.java:94) 
com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:474) 
com.sun.jersey.server.impl.model.method.dispatch.EntityParamDispatchProvider$EntityInjectable.getValue(EntityParamDispatchProvider.java:123) 
com.sun.jersey.server.impl.inject.InjectableValuesProvider.getInjectableValues(InjectableValuesProvider.java:46) 
com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$EntityParamInInvoker.getParams(AbstractResourceMethodDispatchProvider.java:153) 
com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$VoidOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:166) 
com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) 
com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288) 
com.sun.jersey.server.impl.uri.rules.SubLocatorRule.accept(SubLocatorRule.java:134) 
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 
com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) 
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 
com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) 
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469) 
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400) 
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349) 
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339) 
com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416) 
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537) 
com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:895) 
com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:843) 
com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:804) 
com.netflix.eureka.ServerRequestAuthFilter.doFilter(ServerRequestAuthFilter.java:34) 
com.netflix.eureka.StatusFilter.doFilter(StatusFilter.java:68 

वेब सेवाओं सी में लिखा जाएगा ++ तो मैं बाकी एपीआई यूरेका द्वारा उजागर उपयोग करने की आवश्यकता पंजीकरण करने के लिए, मेरी सेवाओं को अपंजीकृत करें।

क्या कोई मदद कर सकता है। मैं इसके साथ अटक गया हूँ।

यूरेका सर्वर विकास मोड में चल रहा है।

धन्यवाद! { "$": 8001, "@enabled": "सच"}

उत्तर

1

जो त्रुटि आप देख रहे हैं वह अनुपलब्ध बाहरी instance फ़ील्ड है जो आपके द्वारा परिभाषित फ़ील्ड को लपेटने के लिए माना जाता है।

{ 
    "instance": { 
     "hostName":"tpdeva13", 
     "app":"service1", 
     "ipAddr":"tpdeva13", 
     "vipAddress":"tpdeva13", 
     "secureVipAddress":"tpdeva13", 
     "status":"STARTING", 
     "port":"11111" 
    } 
} 
1

बंदरगाह इस वाक्य "बंदरगाह" है

और भी dataCenterInfo "dataCenterInfo" की जरूरत है: { "नाम": "MyOwn" }

0

विल वेंडरहोफ ने पहले से ही सवाल का जवाब दिया था, लेकिन मुझे यूरेका के जावा क्लाइंट का उपयोग करके एक ही त्रुटि मिली। विस्तारित डीबगिंग के बाद मैंने पाया कि jackson का संस्करण 2.2.1 के साथ ओवरराइड हो गया है और यह रूट तत्व क्रमिकरण "उदाहरण" का सम्मान नहीं करता है।

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