Register a web service with Eureka

I tried to examine service discovery using the Eureka service (Netflix). I followed the steps in the wiki link below:

https://github.com/Netflix/eureka 

The Eureka service is up and running.

Next, I tried to use the mail client to register the service using the POST method, as described in twiki, after reading the xml schema and sending the content type as JSON.

XML

 <?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> 

Register request parameters are as follows:

url: http: // tpdeva13: 8080 / eureka / v2 / apps / service1 Content-Type: application / json

Parameters sent as json:

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

I'm not sure if the json I supply aligns with the xml schema?

When I send a mail request to the tomcat server hosting eureka, I get the following error:

 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 

Web services will be written in C ++, so I need to use the REST APIs exposed by eureka for registration, unregister my services.

Someone can help. I am stuck in this.

The eureka server is in development mode.

Thanks!

+5
source share
3 answers

The error you see is related to the missing instance external field, which should wrap the fields you defined.

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

has this syntax "port": {"$": 8001, "@enabled": "true"}

and also need dataCenterInfo "dataCenterInfo": {"name": "MyOwn"}

+1
source

Vanderhof was already asked a question, but I got the same error using the eureka java client. After extensive debugging, I found that the original version 2.4.3 jackson was overridden with 2.2.1 , and this did not take into account the “instance” of the root element.

0
source

All Articles